دسته
لينك هاي دسترسي سريع
مطالب من در ثبت مطالب روزانه
آرشیو
آمار وبلاگ
تعداد بازدید : 1137798
تعداد نوشته ها : 1368
تعداد نظرات : 348
Rss
طراح قالب
مهدي يوسفي
مقایسه VB و C++ از نظر سرعت ترجمه
شاید وقتی یک برنامه ی ساده که عملیات سنگینی نداره رو مینویسیم با مشکل سرعت اجرا مواجه نشیم.اما گاهی یکی از بزرگترین مشکل ها همین سرعت اجرا هستش.مثلا یک بازی کامپیوتری 3 بعدی به خاطر اینکه روون باشه و اصلا بشه باش بازی کرد باید تا اونجا که ممکنه سرعت اجرای کد رو بالا برد.

میخوام یک کد ساده رو با VB و با سی بنویسم و کامپایل کنم و اختلاف زمان اجرای این کد روببینیم.
کارش ساده هستش.یه حلفه ی معمولی که 1000 بار تکرار میشه و هر بار 0.00001 به یک مقدار double اضافه میکنه.

*** کد VB ***
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
Dim start_time As Long: start_time = GetTickCount()
Dim i As Double: i = 0
Do While (i < 1000)
i = i + 0.00001
Loop
Dim op_time As Long: op_time = GetTickCount() - start_time
MsgBox "Elapsed time : " & op_time & "ms"
End Sub

*** کد C++ ***
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "conio.h"
int main(int argc, char* argv[])
{
DWORD start_time = GetTickCount();
double i=0;
while (i < 1000) {
i += 0.00001;
}
DWORD op_time = GetTickCount() - start_time;
printf("Elapsed time : %dms\n",op_time);
getch();
return 0;
}

نتایج :
C++ : 437 میلی ثانیه
VB : 2047 میلی ثانیه
یعنی یه چیزی بیشتر از 5 برابر توی این عملیات سرعت C++ بیشتر هستش.
پنج شنبه بیست و ششم 10 1387
تابع واسه آبی کردن و بعد به رنگ معمولی در آوردن (میشه گفت نور انداختن) عنوان و اسم یه (پنجره)فرم توی TaskBar بکار میره .شاید منظورمو نفهمیده باشین.ازش استفاده کنین تا بفهمین:

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

آرگومان اول هندل پنجره مورد نظر هست.
آرگومان دوم رو 1 قرار بدین (اگه صفر قرار بدین عمل مورد نظر–اگر در حال انجام باشه- متوقف میشه)
یه دکمه توی فرم بزارین:

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

Private sub Command1_Click()
FlashWindow Me.hWnd , 1
End Sub

Delphi:

procedure TForm1.Command1Click(Sender: TObject);
begin
FlashWindow(form1.Handle,true);
end;

توی این کد من هندل فرم برنامه خودم رو بش دادم.

2.GetForeGroundWindow
این تابع هندل فرم فعال(که رنگ نوار عنوانش با بقیه فرق داره و معمولا آبیه) رو برمیگردونه:

Private Declare Function GetForegroundWindow Lib "user32" () As Long

هیچ مقداری هم نیاز نیست بش بدیم.یه تایمر توی فرم بزارین و Interval ش رو 1 بزارین:

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Sub Timer1_Timer()
Me.Caption = GetForegroundWindow()
End Sub

Delphi:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Caption := IntToStr(GetForegroundWindow());
end;

3.GetComputerName

این تابع نام کامپیوتری که برنامه داره توش اجرا میشه رو برمیگردونه.این اسم رو میتونین توی قسمت
System Properties (راست کلیک روی My Computer ؛ رفتن به Properties ) توی قسمت Computer Name ببینین.

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

آرگومان اول یه متغیر هست که تابع نام مورد نظر رو توی این قرار میده و طولش باید از قبل تعیین شده باشه.آرگومان دوم هم مشخص میکنه که چند کاراکتر اول نام کامپیوتر توی متغیر قرار بگیره.این عدد باید با طور متغیر برابر باشه یا کوچکتر.بهتره جفتشون رو 255 قرار بدین.:

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Sub Form_Load()
Dim buffer As String * 255
GetComputerName buffer, 255
MsgBox "Computer name : '" & Replace(buffer, Chr(0), "") & "'"
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
var Buffer : Array[1..MAX_PATH] of char ;
var MAX_SIZE : Cardinal;
begin
MAX_SIZE := sizeof(buffer) -1 ;
GetComputerName(@buffer,MAX_SIZE) ;
ShowMessage('Computer Name : ' + StrPas(@buffer));
end;

4.GetCurrentDirectory

این تابع آدرس پوشه ای که برنامه جاری توش داره اجرا میشه رو برمیگردونه.یعنی کار App.path رو انجام میده:

Private Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

روش مقدار دادن آرگومان هاش هم شبیه تابع قبلیه فقط جای اونا عوض شده یعنی آرگومان اول برای تعداد کاراکتر
اول و آرگومان دوم یه متغییر واسه قرار دادن آدرس توی اون:

Private Declare Function GetCurrentDirectoryA Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Sub Form_Load()
Dim buffer As String * 255
GetCurrentDirectoryA 255,Buffer
MsgBox "Current Directory : '" & Replace(buffer, Chr(0), "") & "'"
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
var buffer : array[1..MAX_PATH] of char;
begin
GetCurrentDirectoryA(sizeof(buffer),@buffer);
ShowMessage('Current Directory : ' + strpas(@buffer));
end;

5.GetDoubleClickTime
این تابع هم زمان Double Click که توی کنترل پنل توی قسمت موس مشخص شده رو برمیگردوونه:

Private Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long

هیچ مقداری هم نمیگیره:
Private Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long
Private Sub Form_Load()
Msgbox "DoubleClickTime : " & GetDoubleClickTime()
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('DoubleClickTime : ' + IntToStr(GetDoubleClickTime()));
end;
پنج شنبه بیست و ششم 10 1387
این تابع واسه تغییر مکان و تغییر اندازه Window ها بکار میره و چند تا کاره دیگه هم میکنه:

Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

مقدار اولی که میگیره هندل پنجره هستش.دومی طرز قرار گیفتن پنجره در محور z هستش.مثلا بالاتر از پنجره های دیگه قرار بگیره یا پایین تر و ... .مقدار هایی که این میگیره:

Private Const HWND_BOTTOM = 1
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0
Private Const HWND_NOTOPMOST = -2
Private Const HWND_TOP = 0
Private Const HWND_TOPMOST = -1

هر کدوم از اینارو بزارین ببینین چی میشه . مثلا topmost بالای پنجره های دیگه جتی اونایی که از قبل
Top بودن قرار میگیره.

مقدار سومی و چهارم هم x و y مختصات پنجره هستش که نسبت به پنجره parent (مادر) ش هستش به طوری که بالا و سمت چپ پنجره ء مادر نقطه (0 ، 0 ) حساب میشه.مقدار بعدی هم عرض و طول پنجره مورد نظر هستش.
حالا اگه نخواهیم همه این خصوصیات پنجره رو تغییر بدیم نمیشه مثل ویبی اونا رو مقدار دهی نکنیم.بعضی از مواقع میشه از Byval 0& استفاده کرد اما در مورد این تابع واسه اینکه نخواهیم همه خصوصیاتش رو تغییر بدیم باید آرگومان آخر رو مقدار دهی کنیم.بعضی از مقدار هایی که این میگیره :

Private Const SWP_NOMOVE = &H2 پنچره تغییر مکان نمیده
Private Const SWP_NOACTIVATE = &H10 پنجره فعال نمیشه
Private Const SWP_NOSIZE = &H1 پنجره تغییر اندازه نمیده
Private Const SWP_NOZORDER = &H4 جای پنجره در محور z عوض نمیشه
Private Const SWP_NOREDRAW = &H8 پنجره دوباره رسم نمیشه

یه تایمر و یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Dim x As Integer, y As Integer

Private Sub Form_Paint()
Command1.SetFocus
Timer1.Interval = 100
End Sub

Private Sub timer1_timer()
x = Int(800 * Rnd())
y = Int(600 * Rnd())
SetWindowPos Me.hwnd, 0, x, y, 0, 0, SWP_NOSIZE Or SWP_NOZORDER
End Sub
Private Sub command1_click()
Unload Me
End Sub

اول focus رو به دکمه میدیم بعد .Interval مربوط به تایمر رو مقدار دهی میکنیم.توی Private Sub timer1_timer هم یه x و y
به طور تصادفی بدست میاریم توی خط بعد هم با استفاده از تابع مورد نظر پنجره رو حرکت میدیم.
حالا بعد از اجرا کردن برنامه کلید اینتر رو که بزنین برنامه بسته میشه.

2.CreateDirectory
این تابع واسه ساختن Folder بکار میره :

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long

آرگومان اول مسر پوشه ای که میخواهیم بسازیم هستش
دومی هم یه متغییر از نوع SECURITY_ATTRIBUTES که نیازی به مقدار دهی کردنش هم نیست

Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

برای مثال :

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Dim SA as SECURITY_ATTRIBUTES
Private Sub Form_Load()
Createdirectory "D:\APItest",SA
End Sub

3.Sleep
این تابع برنامه ای که تابع توش فراخوانی شده رو توی زمانی که بش میدیم متوقف میکنه
آرگومانی که میگیره زمان مورد نظره که بر حسب میلی ثانیه هستش.
یه دکمه توی فرم بزارین :

Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Sleep 2000 '2000 ms = 2 s
End Sub

4.BlockInput
این تابع بعد از فراخوانیش موس و کیبرد رو قفل میکنه یعنی دیگه کلید هایی که میزنین بر پنجره ها اثر نداره و موس رو که تکون میدین کرسرش حرکت نمیکنه:

Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long

مقداری که میگیره اگه 0 باشه عمل قفل شدن متوقف میشه و اگه 1 باشه موس و کیبرد قفل میشه.اگه با این تابع موس و کیبرد رو قفل کردین یه فکری هم به فکر آزاد کردن موس و کیبرد باشین :
یه تایمر توی فرم بزارین :

Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long

Private Sub Form_Load()
Timer1.Interval = 5000
BlockInput True
End Sub
Private Sub Timer1_Timer()
BlockInput False
End Sub

با این کد عمل قفل شدن 5 ثانیه طول میکشه.
پنج شنبه بیست و ششم 10 1387
این تابع واسه پخش کردن یه فایل با فرمت wav از توی speaker هاست.آرگومان اول آدرس فایل و دومی و سومی باید 1 باشه.یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Command1_Click()
PlaySound "D:\File.wav",1,1
End Sub

که باید به جای D:\File.wav آدرس یه فایل با پسوند wav بزارین.

2.GetClassName
این تابع هندل یه پنجره رو میگیره و ClassName ش رو برمیردونه.آرگومان اول هندل پنجره.آرگومان دوم یه متغیر که نام کلاس توش قرار میگیره طول این متغییر باید تعیین شده باشه.سومی هم یه عدد مثل n که وقتی به تابع داده میشه تابع n-1 کاراکتر اول نام کلاس رو داخل متغییر قرار میده.(البته مطمین نستم شایدم n کاراکتر اول رو برگردونه.خودم امتحان کردم n-1 کاراکتر اول رو قرار داد)این عدد رو 255 قرار بدین خیال خودتونو راحت کنین.

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Sub Command1_Click()
Dim ipCName as String * 255
GetClassname Me.hWnd,ipCName,255
Msgbox Replace(ipCName,chr(0),"")
End Sub

واسه توضیح در مورد طول متغیر و چرا اینطوریش کردیم به آموزش تابع GetSystemDirectory سر بزنین.

3. GetAsyncKeyState
با این تابع میتونین بفهمین که قبل از فراخوانی تابع آیا یه کلید فشرده شده یه نه.آرگومانی که تابع میگیره کلیدی که مورد نظرمون هست رو مشخص میکنه.برای مثال

Private Const VK_LEFT = &H25

مربوط به کلید چپ هست.کلیه مقدار ها رو میتونین توی API Viewer پیدا کینین.مقدار برگشتی تابع مشخص میکنه که کلید مور د نظر فشرده شده یا نه .یه دکمه توی فرم بزارین:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_LEFT = &H25

Private Sub Command1_Click()
If GetAsyncKeyState(VK_LEFT) Then
Print "<--"
End if
End Sub

در ضمن اگه شما مقدار &H8000 رو هم توی شرط If بزارین عمل چاپ فقط در صورتی که اجرا میشه که کلید چپ در زمان فشره شدن دکمه فشرده شده باشه نه قبلش.
البته در حالت اول برای یک بار فشردن دکمه چپ فقط یک بار عمل چاپ با فشردن دکمه انجام میشه.امتحان کنین تا منظورمو بفهمین.

4.LoadCursorFromFile
این تابع اشاره گر یه فایل کرسر (.cur) رو به مامیده که ازش میشه توی تابع SetSystemCursor استفاده کرد.مثالش رو توی تابع بعدی ببینین.

Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long

5. SetSystemCursor
با این تابع میشه کرسر سیستم رو تعیین کرد.این تابع اول یه اشاره گر از کرسر مورد نظر ما میخواد که ما این رو با استفاده از تابع LoadCursorFromFile میگیریم آرگوما دوم رو هم Private Const OCR_NORMAL = 32512 قرار بدین(مقدار های دیگه رو میتونین توی API Viewer ببینین).یه دکمه توی فرم بزارین:

Private Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Const OCR_NORMAL = 32512

Private Sub Command1_Click()
Dim hc as long
hc = LoadCursorFromFile("D:\c.cur")
SetSystemCursor hc,32512
End Sub

فایلهای با پسوند .cur که با ویژوال بیسیک نصب شدن رو توی شاخه …\COMMON\GRAPHICS\CURSORS پیدا کنین.به امید دیدار.
پنج شنبه بیست و ششم 10 1387
۴. GetTempPath
این تابع هم مسیر پوشه Temp رو به ما میده و یه فرق کوچیک با قبلیه داره . جای آرگومان هاش عوض شده:

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nSize As Long,ByVal pBuffer As String) As Long
Private Sub Form_Load()
Dim tmpPath as String * 255
GetTempPath 255,tmpPath
Msgbox Replace(tmpPath,chr(0),"")
End Sub

5.SetForegroundWindow این تابع هندل یم پنجره رو میگیره و اونو فعال میکنه:

Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long

با استفاده از تابع GetCursorPos مکان موس رو میگیریم و با استفاده از از تابع WindowFromPoint بوسیله مختصات هندل رو میگیریم و به تابع میدیم(یه تایمر توی فرم بزارین):

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim PAPI As POINTAPI,phWnd as long

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
GetCursorPos PAPI
phWnd = WindowFromPoint(PAPI.x, PAPI.y)
SetForeGroundWindow phWnd
End Sub
پنج شنبه بیست و ششم 10 1387
.AnimateWindow
این تابع رو باید در حالتی که یه پنجره هنوز رسم نشده(یا Hide هست و ...) و یا قبل از پنهان شدن هست باید فراخوانی کرد
بعد از فراخوانی تابع پنجره در حالتهای مختلف به صورت انیمیت رسم میشه یا پنهان میشه.مثلا از سمت چپ طولش افزایش پیدا میکنه تا کاملا رسم بشه.این تابع توی API Viewer نیست:

Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

ثابت های مورد نیاز:

Const AW_HOR_POSITIVE = &H1
Const AW_HOR_NEGATIVE = &H2
Const AW_VER_POSITIVE = &H4
Const AW_VER_NEGATIVE = &H8
Const AW_CENTER = &H10
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000

این تابع 3 تا مقدار به صورت byVal میگیره.اول هندل پنجره مورد نظر.دومی زمانی که میخواهیم عمل رسم انجام بشه سومی هم روش رسم هست که باید ثابت ها را به این بدیم.بعضی از مقادیر (آخر) رو میشه از طریق Or با هم استفاده کرد.
موقتی که میخواهیم یک پنجره از حالت رسم شده به حالت پنهان بره باید مقدار AW_HIDE رو هم به پارامتر آخر (با استفاده از Or) اضافه کنید.کارهایی که این ثابت ها میکنن:

AW_HOR_POSITIVE پنجره از چپ به راست رسم یا پاک میشه
AW_HOR_POSITIVE پنجره از راست به چپ رسم یا پاک میشه
AW_VER_POSITIVE پنجره از بالا به پایین رسم یا پاک میشه
AW_VER_NEGATIVE پنجره از پایین به بالا رسم یا پاک میشه
AW_CENTER پنجره از مرکز باز میشه یا بالعکس
AW_ACTIVATE پنجره رو فعال میکنه

بقیه رو هم درست نفهمیدم شما هم امتحان کنین.
یه مثال میزنم.2 تا دکمه داخل فرم درست کنین و کد زیر رو وارد کنین:

Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean
Const AW_HOR_POSITIVE = &H1
Const AW_HOR_NEGATIVE = &H2
Const AW_VER_POSITIVE = &H4
Const AW_VER_NEGATIVE = &H8
Const AW_CENTER = &H10
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000
Private Sub Form_Load()
Me.BackColor = vbBlue
AnimateWindow Me.hwnd, 1000, AW_HOR_POSITIVE Or AW_VER_NEGATIVE
Me.Cls
End Sub
Private Sub Command1_Click()
If Command2.Visible = True Then
AnimateWindow Command2.hwnd, 1000, AW_CENTER Or AW_HIDE: Command2.Visible = False
Else
AnimateWindow Command2.hwnd, 1000, AW_CENTER: Command2.Visible = True
End If
End Sub

برای اینکه بعد از رسم تغییر رنگ های(احتمالی) ایجاد شده از بین بره(صفحه پاک بشه) از Me.Cls استفاده کردم.
این رو هم بگم که در زمانی که تابع داره کارشو میکنه برنامه کار دیگه ای نمیتونه بکنه.در ضمن رنگ زمینه رو عوض کردم تا تغییر اندازه دکمه مشخص بشه.دیگه فکر نکنم توضیحی بخواد.

2.GetBkColor : این تابع BackColor یا رنگ زمینه پنجره ای که hDC ش رو بش دادیم برمیگردونه:

Private Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long

برای مثال Hdc فرم خودمون رو بش میدیم و مقدار بازگشتیشو با BACKcOLOR فرممون مقایسه میکنیم(1 دکمه توی فرم بزارین):

Private Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long
Private Sub Form_Load()
Me.BackColor=VbBlue
End sub
Private Sub Command1_Click()
Dim BKcolor as Long
BKcolor = GetBkColor(Me.hdc)
If BKcolor = Me.BackColor Then
Msgbox "Good!",vbinformation
Else
Msgbox "Wrong!!",vbCritical
End If
End Sub

توجه کنین که من در Private Sub Form_Load() رنگ زمینه فرم رو از حالت پیشفرض خارج کردم و یه رنگ معمولی بش دادم این به این دلیل بود که فرم در حالت پیشفرض دارای رنگ زمینه VbFaceButton (یه رنگ سیستمی) هست و برای همین هم خصوصیت Me.BackColor بجای اینکه رنگ زمینه واقعی رو برگردونه یه چیز دیگه برمیگردونه.

3. GetSystemDirectory
این تابع برای گرفتن آدرس پوشه سیستم بکار میره مثلا در ویندوز 98 اگه ویندوز در درایو C نصب شده باشه محل اغلبا"
C:\Windows\System هست.
این تابع به این صورته:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

مقدار اول یه متغیر از نوع String هست که باید به تابع بدیم تا مسیر رو توی اون قرار بده.و دومی رو 255 قرار بدین.این مقدار
نشون میده که تابع حداکثر چند کاراکتر اول مسیر رو برگردونه.چون طول این مسیر به ندرت 255 میشه ما این عدد رو بش میدیم.یه نکته رو توجه کنین که این تابع مقدار 255 کاراکتر(که خودمون مشخص کردیم) رو داخل متغییری که بش دادیم قرار میده که کاراکتر های اول رو مسیر پوشه سیستم و بقیه رو با کاراکتر 0 پر میکنه.بنابراین ما باید طور متغیر که در عادی 0 هست رو به 255 تغییر بدیم و گرنه چون تابع میخواد مقدار رو درون تابع جا بده و تابع جا نداره(طولش 0 هستش) اشکال ایجاد میشه و برنامه ما بسته میشه.همن این ها به این علت هستش که تابع طول متغیر ما رو تغییر نمیده(ولی در خود ویبی اگر یه مقداری رو به یه متغیر از نوع String بدیم طول متغییر خودکار اضافه میشه.)
برای اینکه ما طول متغیر رو برای این تابع به مقدار 255 کاراکتر تغییر بدیم 2 کار میتونیم بکنیم.یکی از این روشه:
Dim sysPath as string * 255
توی این روش طول متغیر با استفاده از 255 کاراکتر تغییر میکنه.(با استفاده از کاراکتر 0‌)
یا اینکه یه مقدار با طول 255 به متغییر میدیم:

Dim sysPath as String
sysPath = String(255," ")

حالا تابع رو فراخوانی میکنیم:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim sysPath as String * 255
GetSystemDirectory sysPath,255
Msgbox Replace(sysPath,chr(0),"")
End Sub

در خط یکی مونده به آخر با استفاده از تابع Replace مقدار کاراکتر 0 اضافی که با تابع داده شده حذف میشه.
3.GetWindowsDirectory
این تابع مسیر پوشه ویندوز رو برمیگردونه و روش کار باش مشابه قبلی هست :

Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim winPath as String * 255
GetWindowsDirectory winPath,255
Msgbox Replace(winPath,chr(0),"")
End Sub
پنج شنبه بیست و ششم 10 1387
برای Shut Down کردن سیستم از تابعExitWindowEx استفاده میشه :

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

پارامتر اول یکی از مقدار های زیر میتونه باشه :

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

همش به غیر از آخری واضحه.آخری با هر کدوم از بقیه که ترکیب بشه (با Or ) موجب میشه که ویندوز برنامه ها رو مجبور به بستن کنه.پارامتر دوم رو هم VbNullString قرار بدین
.مثال :

Private Sub Command1_Click()
ExitWindowsEx EWX_SHUTDOWN or EWX_FORCE, VbNULLString
End Sub

توی ویندوز XP این روش کار نمیکنه.برای شات دانون کردن ویندوز باید از فایل ShutDown.Exe که توی دایرکتوری سیستم هست استفاده کرد.این فایل واسه Shut Down کردن چند تا پارامتر میتونه بگیره که یکیش رو حتما باید بش بدین :

-I

یه واسط کاربری نشون میده که توی اون کاربر Options ها رو مشخص میکنه و بعد OK میکنه تا سیستم خاموش بشه و اگه این رو استفاده کردین دیگه نیاز به پارامتر دیکه ای نیست .البته این پارامتر اصلا به کار ما نمیاد.ما میخواهیم به طور اتوماتیک سیستم رو Shut Down کنیم.

-l

سیستم Logoff میشه

-s

سیستم Shutdown میشه.(توی قسمت های قبلی هرجا گفتم Shut Down منظورم Restart , Shutdown , Logoff بود)

-r

سیستم Restart میشه.

-a

اگه سیستم در حال Shut Down شدن باشه ،این کار لغو (abort)میشه.

-t [Seconds]

این برای زمان بکار میره.یعنی اینکه اگه از این پارامتر استفاده کنین باید بعدش یه عدد که معرف ثانیه هستش بنویسین که اگه این کارو بکنین یه پنجره مثل این نشون داده میشه و سیستم بعد از زمانی که شما تعیین کردین Shut Down میشه:

-c "[This is a comment] "

اگه از پارامتر t استفاده کرده باشین با این پارامتر (c) میتونین توی قسمت Message یه پیغام برای کاربر نشون بدین مثل اینی که من گذاشتم (This is a comment) در ضمن طول این پیغام حداکثر باید 127 کاراکتر باشه.


-f

مثل مقدار EWX_FORCE توی تابع ExitWindowsEx عمل میکنه یعنی اگه ازش استفاده کنین ویندوز برنامه ها رو مجبور به بستن میکنه.
حالا ما برای Shut Down کردن باید این فایل رو با پارامتر ها باز کنیم.از تابع Shell استفاده میکنیم :
2 تا دکمه یکی cmdShutDown و یکی دیگه cmdAbort درست کنین :

Private Sub cmdShutDown_Click()
Shell "Shutdown.exe -r –t 30 –f –c " & """" & "This is a comment" & """"
End Sub
Private Sub cmdAbort_Click()
Shell "Shutdown.exe –a"
End Sub

وقتی دکمه cmdShutDown رو بزنین یه پنجره مثل پنجره ای که عکسش رو گذاشتم ظاهر میشه و شمارش معکوس از 30 شروع میشه.اگه به 30 برسه ویندوز رستارت میشه.اگه دکمه cmdAbort رو بزنین پنجره ی Shut Down بسته میشه.
حالا یه کد واسه رستارت در همون لحظه :

Private Sub cmdShutDown_Click()
If MsgBox("Are you sure? ",VbCritical + VbYesNo) = VbYes Then
Shell "ShutDown.exe –r –f –t 0"
End If
End Sub
پنج شنبه بیست و ششم 10 1387
.GetWindowRect

این تابع مختصات چهار سمت(چپ راست بالا پایین) یه پنجره رو توی یه متغیر از نوع rect قرار میده:

Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long

آرگومان اول هندل پنجره مورد نظره.دومی هم یه متغییر از نوع rect هستش که تابع مقدار مورد نظر رو توی اون قرار میده.یه label و یه timer توی فرم بزارین و :

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_Load()
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
Dim PAPI As POINTAPI, R As RECT
GetCursorPos PAPI
GetWindowRect WindowFromPoint(PAPI.x, PAPI.y), R
Label1.Caption = "Top : " & R.Top & " Bottom : " & R.Bottom _
& " Left : " & R.Left & " Right : " & R.Right _
& " Height : " & R.Bottom - R.Top & " Width : " & R.Right - R.Left
End Sub

اول با استفاده از تابع های GetCursorPos و WindowFromPoint هندل پنجره ای که کرسر موس روشه رومیگیریم.بعد با تابع مورد نظر مختصات بالا و پایین و چپ و راست ومقدار طول وعرزش رو بدست میاریم.

4.InternetGetConnectedState

این تابع مشخص میکنه که کامپیوتر چه طوری به اینترنت متصل شده و یا اصلا متصل شده یا نه:

Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long,ByVal dwReserved As Long) As Long

آرگومان اول یه متغیر از نوع Long هستش که تابع مقداری که مربوط به نوع ارتباط میشه رو توی این قرار میده.دومی رو هم byval 0& بزارین.

وقتی تابع مقدار رو توی متغیر قرار داد باید با if های متعدد نوع ارتباط رو پیدا کنیم.مقدار میتونه یکی (یا چند تا) از اینا باشه:

Private Const INTERNET_CONNECTION_MODEM As Long = &H1 MODEM ارتباط از طریق
Private Const INTERNET_CONNECTION_LAN As Long = &H2 LAN ارتباط از طریقProxy
Private Const INTERNET_CONNECTION_PROXY As Long = &H4 ارتباط دارای پراکسی هستش
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8 مودم Busy هستش (؟)
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20 کامپیوتر در حالتOffline هستش
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40 کامپیوتر به اینترنت متصل هستش
Private Const INTERNET_RAS_INSTALLED As Long = &H10 روی کامپیوتر نصب شدهRas

اگه مقدار برگشتی تابع 0 باشه کامپیوتر به اینترنت وصل نیست و اگه 1 باشه وصله.

چون ممکنه مقداری که به متغییر داده میشه چند تا از مقدار های بالا باشه (مثلا CONNECTION_CONFIGURED و CONNECTION_MODEM) باید توی If از AND استفاده کنیم و نمیشه از = استفاده کرد:

Private Const INTERNET_CONNECTION_LAN As Long = &H2
Private Const INTERNET_CONNECTION_PROXY As Long = &H4
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40
Private Const INTERNET_RAS_INSTALLED As Long = &H10

Private Sub Form_Load()
Dim lpF As Long, MBStr As String
If InternetGetConnectedState(lpF, ByVal 0&) = 1 Then
If lpF And INTERNET_CONNECTION_CONFIGURED Then
MBStr = "Connection to the internet = True ..." & vbNewLine
End If
If lpF And INTERNET_CONNECTION_MODEM Then
MBStr = "By MODEM" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_LAN Then
MBStr = "By LAN" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_MODEM_BUSY Then
MBStr = "MODEM Busy" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_OFFLINE Then
MBStr = "Offline" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_PROXY Then
MBStr = "Proxy" & vbNewLine
End If
If lpF And INTERNET_RAS_INSTALLED Then
MBStr = "Ras Installed" & vbNewLine

End I
Else
MBStr = "Connected to the internet = False"
End If
MsgBox MBStr
End Sub
پنج شنبه بیست و ششم 10 1387
معرفی و اموزش چند تابع API

1.Mouse_event

این تابع واسه شبیه سازی کردن فشرده (یا رها) شدن دکمه های موس هستش:

Private Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

آرگومان اول دکمه ای هستش که میخواهیم شبیه سازیش کنیم و این مقدار هارو میشه بهش داد:

Private Const MOUSEEVENTF_LEFTDOWN = &H2 دکمه سمت چپ فشرده میشه
Private Const MOUSEEVENTF_LEFTUP = &H4 دکمه سمت چپ رها میشه
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 دکمه وسطی فشرده میشه
Private Const MOUSEEVENTF_MIDDLEUP = &H40 دکمه وسطی رها میشه
Private Const MOUSEEVENTF_RIGHTUP = &H10 دکمه سمت راست فشرده میشه
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 دکمه سمت راست رها میشه

بقیه آرگومان ها رو ۰ قرار بدین

حالا عمل فشرده (یا رها) شدن دکمه های موس در جایی که موس قرار داره شبی سازی میشه:

Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Sub Command1_Click()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

kb_event.۲

این تابع واسه شبیه سازی فشرده شدن یا رها کردن دکمه های کیبرد هستش:

Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

آرگومان اول کلید مورد نظر هستش که توی ویبی میشه از vbkeyA , vbkeyB , ... استفاده کرد.یا میشه از ثابت هایی که توی ای پی آی ویور هست VK_A ... , VK_B , ... استفاده کرد.

آرگومان دوم رو 0 بزارین.سومی آگه 0 باشه عمل فشرده شدن و اگه 2 باشه عمل رها شدن کلید بازسازی میشه.چهارمی رو هم 0 قرار بدین:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Form_Click()
keybd_event vbKeyA, 0, 0, 0
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub
پنج شنبه بیست و ششم 10 1387
. Switch یک تعداد آرگومان که تعدادشون باید زوج باشه میگیره به طوری که :
آرگومان های فرد( اولی ، سومی ، پنجمی و ...) باید یک عبارت باشن(یا میشه گفت عبارت در نظر گرفته میشن)
آرگومان های زوج هم باید مقدار باشن(یا میشه گفت مقدار در نظر گرفته میشن)
تابع میاد به ترتیب تک تک آرگومان های فرد رو مورد بررسی قرار میده.به اولین آرگومانی که ارزشش درست (True) باشه که رسید آرگومان بعد از اون(که یک مقدار هست) رو برمیگردونه.

مثلا فرض کنین شما میخواهین یک تابعی درست کنین که یک عدد از 1 تا 5 بگیره و معادل رشته ای اون رو (“One” ، “Two” و ...) رو برگردونه.با استفاده از این تابع شما میتونین اینطوری عمل کنین :
Function nToS(Byval n as Integer) As String
If n > 5 Or n < 1 Then Exit Function
nToS = Switch(n=1,”One”,n=2,”Two”,n=3,”Three”,n=4,”Four”,n=5,”Five”)
End Function

کد این تابع اول چک میکنه که عددی که بهش داده شده بین 1 تا 5 هست یا نه.اگه نبود از تابع خارج میشه.
اما اگه بود با استفاده از تابع Swich مقدار ها ی مختلفی که n میتونه داشته باشه رو چک میکنه و مقدار معادل رشته ای رو برمیگردونه.مثلا nToS(4)=”Four” .

162. SYD

163. Tan این هم تانژانت یک زاویه (بر حسب رادیان) رو برمیگردونه.

164. TextHeight یک رشته میگیره و ارتفاعی رو که اون رشته اشغال میکنه رو باتوجه به فونت فرم و واحد فرم(ScaleMode) برمیگردونه.مثلا اگه واحد و فونت فرم پیشفرض باشه :
TextHeight(“m”) = TextHeight(“MA”) = 195

یعنی اینکه ارتفاعی که اشغال میکنه به طول رشته و یا کوچک و بزرگ بودن کاراکتر ها بستگی نداره(که این هم بدیهیه!)

165. TextWidth کار تابع قبلی رو برای عرض یک رشته انجام میده.با این فرق که همونطور که میدونیم با تغییر تعداد کاراکتر یک رشته و یا کوچک و بزرگ بودن کاراکتر ها عرضی که رشته اشغال میکنه فرق میکنه.مثلا
TextWidth(“a”) = 90 ، TextWidth(“A”) = 166 و TextWidth(“Abcd”) = 375

167. TimeSerial ساعت و دقیقه و ثانیه رو میگیره و زمان رو با نوع Dateبرمیگردونه مثلا
Debug.Print TimeSerial(10, 20, 30) ‘ prints 10:20:30 AM

168. TimeValueمثل قبلیه با این فرق که یه تا مقدار رو یکجا و از نوع رشته میگیره .مثلا :
Debug.Print TimeValue(“10:20:30”) ‘ prints 10:20:30 AM

169. Trim (و Trim$) یک رشته میگیره و فاصله های اول و آخرش رو حذف میکنه(کار LTrim و RTrim رو با هم میکنه) مثلا :
Debug.Print Trim(“ Visual Basic “) ‘prints “Visual Basic”

170. TypeName یک مقدار میگیره و نوعش رو برمیگردونه.اون مقدار میتونه از هر نوعی باشه.مثلا :

Debug.Print TypeName(Me) ‘ prints Form1
Debug.Print TypeName(Command1) ‘ prints CommandButton
Debug.Print TypeName(“Hello”) ‘ prints String
Debug.Print TypeName(2.2) ‘ prints Double
Debug.Print TypeName(Err) ‘ prints ErrObject

171. UCase (و UCase$) یک رشته میگیره و همه ی حروف کوچک اون رو به حروف بزرگ تبدیل میکنه مثلا ”!UCase(“Hello!”) = “HELLO.این تابع برعکس LCase کار میکنه.

172. Unload یک آبجک رو از حافظه پاک میکنه.مثلا Unload Form1

173. Val یک رشته میگیره و عدد های سمت چپش رو جدا میکنه و وقتی به یک کاراکتر غیر عددی یا غیر نقطه برسه کارش رو ادامه میده .عددی که برمیگردونه از نوع Double هستش.مثلا
Val(“2 4 7 11 323.23 adas”) = 24711323.23

174. در مورد کار تابع های ValidateControls و WhatsThisMode هم چیزی نفهمیدم :

MSDN :
ValidateControls: Ensures that the contents of the last control on the form are valid before exiting the form.
WhatsThisMode: Duplicates the functionality of the WhatsThisMode method of a Visual Basic 6.0 form.

175. VarType هم یک مقدار میگیره و نوع اون رو از نوع vbVarType برمیگردونه و فرقش هم با TypeName همینه.مثلا
VarType(2.2) = vbDouble

176. Year یه تاریخ میگیره و سال اون رو استخراج میکنه.مثلا
Year(Now()) = 2005

177. ‌ZOrder مختصات Z یک کنترل(به طور پیشفرض فرمی که توش فراخوانی میشه) رو تعیین میکنه.مختصات Z تیعیین میکنه که کدوم کنترل ها باید زیر بقیه و کدوم باید روی دیگری باشه.مقدار 0 (مقدار پیشفرض) یه کنترل رو به رو میاره و مقدار 1 به زیر میبره
پنج شنبه بیست و ششم 10 1387
141. SaveSetting با گرفتن نام برنامه(دلخواه) Setion و Key و یه رشته ه عنوان اطلاعات یا تنظیم مورد نظر ، یک Key توی رجیستری با اسم ]نام برنامه[ درست میکنه.توی اون یک Key دیگه با اسم [Section] درست میکنه و توی اون یک Value از نوع رشته (SZ)با اسم [Key] درست میکنه و مقدار اون رو برابر رشته ای که بهش دادیم (Setting) قرار میده.که بعدا با تابع GetSetting و یا GetAllSettings میتونین به این اطلاعات دسترسی پیدا کنین.این اطلاعات توی رجیستری توی شاخه ی :
HKEY_CURRENT_USER\Software\VB and VBA Program Settings

درست میشن. با توجه به مقدار هایی که بهشون دادیم:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\[appName]\[Section]

ScaleX .142-3 و ScaleY یه مقدار و 2 تا واحد میگیرن و واحد مقداری رو که گرفتن تغییر میدن مثلا از Pixel به Inch .آرگومان اول همون مقدار مورد نظره مثلا 1000 دومی واحدیه که برای مقدار باید در نظر گرفته بشه بطور پیشفرض vbHimetric هستش.بعدی واحد خروجیه که بطور بیشفرض برابر با ScaleMode فرم هستش که اون هم به طور پیشفرض vbTwips هستش.مثلا اگه بخواهیم ببینیم 10اینچ چند میلیمتره :
ScaleX(10, vbInches, vbMillimeters)

Seek .144 شماره ی فایلی که باز شده رو میگیره و برای حالت Random شماره رکورد بعدی (که قراره نوشته یا خوانده بشه) و برای حالت های دیگه شماره بایت بعدی که قراره نوشته یا خوانده بشه رو برمیگردونه که قبل از اینکه چیزی نوشته یا خونده بشه مقدار یک رو برمیگردونه بعد 2 و به همین ترتیب.فرقش هم با Loc همینه.Loc شماره آخرین رکورد یا بایتی که نوشته یا خوانده شده رو برمیگردونه.

145. SendKeys یک یا چند کارکتر یا دکمه های کیبرد رو به پنجره ی فعال ارسال میکنه درست مثل اینکه دکمه های کیبرد فشار داده شده باشن.2 تا آرگومان میگیره که دومی اختیاریه.آرگومان اولی کاراکتر هایی هستن که میخواهیم ارسال کنیم مثلا “vb” .واسه دکمه های خاص کیبرد مثل HOME ها DELETE و ... باید اون ها رو توی آکلاد قرار بدین مثلا :
برای insert از “{INSERT}” یا “{INS}” استفاده میشه.
برای end از “{END}” استفاده میشه.
برای delete از “{DELETE}” یا “{DEL}” استفاده میشه.
برای page down از “{PGDN}” استفاده میشه.
برای page up از “{PGUP}” استفاده میشه.
برای home از “{HOME}” استفاده میشه.
برای علامت چپ از “{LEFT}” استفاده میشه.
برای علامت بالا از “{UP}” استفاده میشه.
برای علامت راست از “{RIGHT}” استفاده میشه.
برای علامت پایین از “{DOWN}” استفاده میشه.
برای print screen از “{PRTSC}” استفاده میشه.
برای scroll lock از “{SCROLLLOCK}” استفاده میشه.
برای break از “{BREAK}” استفاده میشه.
برای back space از “{BACKSPACE}” یا“{BS}” یا “{BKSP}” استفاده میشه.
برای enter از “{ENTER}” یا "~" (بدون آکلاد) استفاده میشه.
برای F1 ، F2 و... هم از “{F1}” ، “{F2}” و ... استفاده میشه.
برای escape از “{ESC}” استفاده میشه.
برای tab از “{TAB}” استفاده میشه.
برای caps lock از “CAPSLOCK” استفاده میشه.

واسه نگه داشتنه شدن کلید های Control و Alt و Shift به ترتیب از ^ ، % ، + استفاده کنین.مثلا برای کنترل بعلاوه ی v از “^v” استفاده کنین.اگه میخواهین یکی ازین دکمه ها واسه مجموعه ای از کلید ها مورد استفاده قرار بگیره از پرانتز استفاده کنین مثلا برای کنترل بعلاوه ی vb از “^(vb)” استفاده کنین.برای استفاده همزمان از چند تا ازین کلید ها هم اون ها رو پشت سر هم استفاده کنین مثلا برای شیفت بعلاوه ی کنترل بعلاوه v از “+^v” استفاده کنین.این کار رو برای دکمه های HOME و INSERT و ... هم میتونین بکنین.مثلا کنترل بعلاوه یHOME میشه “^{HOME}” .

آرگومان دوم از نوع Boolean هستش که بطور پیشفرض False هستش.اگه True باشه وقتی که کلیدی به یک پنجره ارسال میشه تابع منتظر میشه تا اون پنجره عملیات فشرده شدن کلید رو برای خودش پردازش کنه بعد کنترل به تابع برمیگرده.

146. SetAttr آدرس یه فایل رو میگیره و Attributes مربوط به اون رو تغییر میده.(مثل سیستم آرشیو نرمان و ...)

147. Focus این تابع Focus رو به کنترلی که این متد از اون فراخوانی بشه میده.اگه قبلش اسم کنترل رو نیاریم بطور پیشفرض Focus به فرم ی که تابع توش فراخوانی شده داده میشه.

148. Sng کار تابع Sign( علامت) توی ریاضی رو میکنه.به این صورت که یک عدد میگیره.اگه عدد بزرگتر از صفر باشه مقدار 1 اگه برابر با صفر باشه مقدار صفر و اگه کوچکتر از صفر باشه مقدار 1- رو برمیگردونه.

149. Shell آدرس یه فایل اجرایی رو میگیره و اون رو اجرا میکنه و Process ID اون رو برمیگردونه.آرگومان اولی آدرس فایل هستش که میتونه آدرس کامل باشه یا فقط اسم فایل (برای فایل هایی که توی پوشه ویندوز یا سیستم یا دایرکتوری جاری هستن) .آرگومان دومی هم نوع نمایش اون ها هست که مشخصه مثلا اگه بخواهیم برنامه توی حالت Maximize باز بشه از vbMaximizedFocus استفاده میکنیم.

150. Show متد مربوط به فرم هستش که یک فرم رو لود میکنه و نشون میده.آرگومان اول اگه vbModal باشه فرم اول(که کد توش نوشته شده) تا زمانی که فرم دوم(که با استفاده از متد Show نشون داده شده) بسته نشه قابل دسترسی نیست و کد بعد توی فرم اجرا نمیشه.مثل وقتی که توی فرم یه MsgBox نشون میدین؛تا وقتی که پنجره ی MsgBox رو نبندین فرم غیر قابل دسترسه و برنامه به خط بعد نمیره.آرگومان بعدی هم فرمیه که به عنوان والد فرمی که قراره نشون داده بشه در نظر گرفته میشه و مقدار دهیش هم اختیاریه.مثلا

‘ ‘In Form 1 :
Form2.Show vbModal,Form1

151. Sin سینوس زاویه ی داده شده(بر حسب رادیان) رو حساب میکنه.

152. SLN

153. Space(و Space$) یک عدد میگیره و به تعداد اون عدد Space برمیگردونه مثلا Space(4) مقدار “ “ رو برمیگردونه.

154. Split یه رشته و یه کاراکتر جدا کننده میگیره و با توجه به اون کاراکتر کلمه های موجود توی اون رشته رو توی یک آرایه رشته ای قرار میده.مثلا اگه رشته ی “VB Is Easy” و کاراکتر “ “ رو بهش بدیم اعضای آرایه ای که برمیگردونه “VB" ، “Is” و “Easy” هستن.یا اگه “One_Two_Three” و “_” رو بهش بدیم اعضای آرایه “One” ، “Two” و “Three” میشن.آرگومان اول رشته ی مورد نظره.آرگومان بعدی کاراکتر مورد نظره که بطور پیشفرض “ “ (Space) در نظر گرفته میشه.آرگومان بعدی حداکثر تعداد اعضا هستش مثلا اگه برای مثال قبلی این آرگمان رو 2 میگذاشتین اعضای آرایه “One” و “Two” میشدن(عضو سومی وجود نداشت) آرگومان بعدی هم نوع مقایسه برای کاراکتریه که بهش میدیم.(توی توضیح تابع InStr در مورد نوع مقایسه توضیح دادم.)

155. Sqr رادیکال یک عدد رو میگیره.مثلا Sqr(9) = 3. .برای جذر گرفتن یک عدد با فرجه بغیر از 2 از توان استفاده کنین مثلا اگه بخواهین از 8 با فرجه 3 جذر بگیرین از 8 ^ (1/3) استفاده کنین.

156. Str (و Str$) یه مقدار رو به نوع Str تبدیل میکنه.مثلا “Str(1) = “1

StrComp .157 دو تا رشته رو مقایسه میکنه.اگه رشته ها برابر بودن مقدار 0 .اگه اولی از دومی بزرگتر بود مقدار1 و اگه دومی از اولی بزرگتر بود مقدار -1 رو برمیگردونه.2 تا آرگومان اول 2 تا رشته ی مورد نظر هستن.سومی هم نوع مقایسه دو تا رشته هستش که توی توضیح تابع Instr درموردش گفتم اما چون به این تابع بیشتر مربوط میشه اینجا هم میگم. اگه از vbBinaryCompare استفاده کنین بین حروف کوچک و بزرگ تفاوت گذاشته میشه و اون ها مساوی حساب نمیشن (Case Sensitive) اگه از vbTextCompare استفاده کنین حروف بزرگ و کوچک یکی حساب میشن. vbDatabaseCompare هم مربوط به Access هستش و کاری بهش نداریم.مثلا (StrComp(“abCD”,”abcd”,vbBinaryCompare مقدار -1 رو برمیگردونه یعنی رشته ها با هم مساوی نیستن.در صورتی که 0= (StrComp(“abCD”,”abcd”,vbTextCompare.

این رو هم بگم که ویبی به طور پیشفرض Case Sensitive هستش و حروف بزرگ و کوچک مساوی نیستن یعنی “VB” <> “Vb” اما اگه کد Option Compare Text رو اول کدها(بالای فرم یا ماژول) بزارین این حساسیت ویبی از بین میره.

158. StrConv واسه تبدیل کردن نوع یک رشته به یک نوع دیگه بکار میره.آرگومان اول رشته ی مورد نظره .آرگومان بعدی هم نوع جدید هستش.که یکی از مقدار های زیر میتونه باشه :
vbFromUnicode – با این آرگومان تابع رشته ای که بش دادیم رو Unicode در نظر میگیره و اون رو به ANSI تبدیل میکنه.
vbHiragana - کاراکتر های Katakana ی توی رشته رو به Hiragana تبدیل میکنه.(مربوط به Encoding کره ایه و بدرد ما نمیخوره اصلا!)
vbKatakana – برعکس قبلی.
vbLowerCase – همه ی حروف بزرگ توی رشته رو به حروف کوچک تبدیل میکنه.مثلا “Visual Basic” میشه “visual basic”
vbNarrow – کاراکتر های 2 بایتی رو به کاراکتر های تک بایتی تبدیل میکنه
vbWide - برعکس قبلی.
vbPopperCase – اولین حروف همه ی کلمه های موجود توی رشته(رشته ای که بعد از فاصله قرار داره) رو به حروف بزرگ تبدیل میکنه.مثلا “Visual basic is easy” رو به “Visual Basic Is Easy” تبدیل میکنه.
vbUnicode - کاراکتر های متن رو به کاراکتر های Unicode تبدیل میکنه.
vbUpperCase - همه ی حروف کوچک توی رشته رو به حروف بزرگ تبدیل میکنه.مثلا “Visual Basic” میشه “VISUAL BASIC”

این رو هم بگم که این تابع مثل بقیه تابع های کار با رشته ی ویبی رشته ای که بهش میدیم رو تغییر نمیده و رشته ی جدید رو برمیگردونه.

159. String (و String$) یک عدد(n) و یه کاراکتر میگیره و یه رشته که حاوی n تا از اون کاراکتره برمیگردونه .(مثل Space که n تا فاصله برمیگردونه) مثلا ”String(4,”a”) = “aaaa.در ضمن به جای اون کاراکتر میتونین کد اسکیش رو هم به تابع بدین مثلا ”String(4,65)=”aaaa.

160. StrReverse یه رشته رو برعکس میکنه مثلا ”StrReverse(“VisualBasic”) = “cisaBlausiV
پنج شنبه بیست و ششم 10 1387
. Pmt

122. Point مختصات یه نقطه از فرم رو میگیره و رنگ اون نقطه(بر اساس RGB:Red-Green-Blue) رو برمیگردونه.

123. PopupMenu یه Popup Menu روی فرم نشون میده.آرگومان اولی اسم اون منو هست که اونو توی محیط ویبی ساختین.
دومی Flags یا میشه گفت Options مربوط به نحوه ی نمایش منو هستش که یکی (یا چند تا) از اینها میتونه باشه :

vbPopupMenuRightAlign منو رو سمت راست مختصاتی که بهش دادین نمایش میده
vbPopupMenuLeftAlign منو رو سمت چپ مختصاتی که بهش دادین نمایش میده(پیشفرض)
vbPopupMenuCenterAlign منو رو وسط مختصاتی که بهش دادین نمایش میده
vbPopupMenuLeftButton منو فقط دکمه چپ موس رو تشخیص میده.(اگه روی گزینه هاش راست کلیک کنین اتفاقی نمیفته) (پیشفرض)
vbPopupMenuRightButton منو دکمه چپ و راست موس رو تشخیص میده.

دو تا آرگومان بعدی مختصات جاییه که میخواین منو نمایش داده بشه.آرگومان آخر هم گزینه ی پیشفرضیه که توی گزینه های منو کلفت تر از بقیه نشون داده میشه .واسه این آرگومام هم باید اسم منو رو قرار بدین.مثلا اگه منوی شما اینطوری باشه:

Edit (mnuEdit)
Copy (mnuCopy)
Cut (mnuCut)
Delete (mnuDel)
Paste (mnuPaste)

برای نمایش منوی Edit برای وقتی که روی TextBox کلیک میشه :

Private Sub TextBox1_Click()
Call PopUpMenu(mnuEdit, vbPopupMenuRightAlign Or vbPopupMenuRightButton,,,mnuCopy)
End Sub

که در این حالت منوی کپی پیشفرض میشه.

124. PPmt

125. PrintForm صفحه ی فرمی که توش تابع فراخوانی شده رو واسه چاپ به پرینتر میبره.

126. PSet واسه رسم نقطه با رنگ داخواه روی فرم بکار میره.آرگومان اول مختصات نقطه.بعدی هم رنگ هستش مثلا PSet (100,100),vbRed یا Form1.Pset… یا Picture1.PSet..

127. PV

128. QBColor یک عدد بین 0 تا 15 میگیره و بر اساس اون ها یک رنگ از نوع RGB برمیگردونه.
0 برای سیاه 1 برای آبی تیره 2 برای سبز تیره 3 برای فسفری تیره 4 برای قرمز تیره 5 برای بنفش 6 برای زرد 7 برای سفید تیره!(خاکستری کم رنگ) 8 برای خاکستری 9 برای آبی 10 برای سبز .11 برای فسفری 12 برای قرمز 13 برای صورتی 14 برای زرد 15 برای سفید. مثلا (Form.BackColor = QBColor(9) ‘=vbRed = RGB(255,0,0

129. Randomize واسه این به کار میره که نتایج تابع Rnd() که واسه بدست آوردن اعداد تصادفی بکار میره هر دفعه تکراری نباشه.مثلا این کد رو در نظر بگیرین :

Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
‘Prints :
0.7055475
0.533424
0.5795186

توی یه برنامه ای که با این کد من درست کردم هر دفعه که برنامه اجرا میشد همین مقدار ها بدست میومد.واسه جلوگیری از این کار از Randomize استفاده میکنیم.

130. Rate

131. Refresh فرم( یا هر آبجک دیگه ای که متد مربوط بهش باشه) رو Refresh میکنه.یعنی اون شی دوباره رسم میشه.

132. Replace توی رشته ای که بهش میدیم یک رشته رو جایگزین یه رشته ی دیگه میکنه و رشته ی جدید رو برمیگردونه.آرگومان اول رشته ی اصلیه.دومی رشته ای هستش که باید پیدا بشه و رشته ی جدید جایگزینش بشه.رشته ی بعدی رشته ی جدید هستش که قراره جایگزین بشه.آرگومان بعدی هم جایی هستش که عمل جایگزینی باید از اونجا شروع بشه.بعدی حداکثر تعداد جایگزینیه .بعدی هم نوع مقایسه هستش که توی توضیح تابع InStr در موردش گفتم.مثلا :
Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”) ‘ It’s VisuXXl BXXsic!
Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”,7) ‘ It’s Visual BXXsic!
Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”,,1) ‘ It’s VisuXXl Basic!
Debug.Print Replace(“It’s Visual Basic!”,”A”,”XX”) ‘ It’s Visual Basic!
Debug.Print Replace(“It’s Visual Basic!”,”A”,”XX”,,,vbTextCompare) ‘ It’s VisuXXl BXXsic!

133. Reset هم ی فایل های باز شده رو میبنده.

134. RGB سه مولفه ی قرمز و سبز و آبیه یک رنگ رو میگیره و اون رو برمیگردونه(از نوع Long) مثلا برای رنگ قرمز : (RGB(255,0,0 و یا برای زرد (RGB(255, 255, 0
در ضمن هر آرگومان باید بین 0 تا 255 باشه.

135. Right (و $Right) برعکس Left عمل میکنه یعنی یه تعداد کاراکتر از سمت راست یک رشته جدا میکنه.

135. RightB (و $RightB) یک رشته رو میگیره و به تعداد دلخواه بایت از سمت راست جدا میکنه.مثلا ”LeftB("Visual", 2)=”l چون هر کاراکتر 2 بایت حساب میشه.

136. RmDir یک دایرکتوری رو حذف میکنه.توی اون دایرکتوری نباید فولدر یا فایل دیگه ای باشه.

137. Rnd یک عدد تصادفی بین 0 تا 1 (0,1] با سه رقم اعشار از نوع Single برمیگردونه مثلا 0.492

138. Round برای یک عدد اعشاری تعداد اعشار دلخواه رو نگه میداره و بقیه رو حذف میکنه.مثلا Round(1.2345,2) = 1.23 اینجا 2 تا از ارقام اعشار نگه داشته شدن.

139. RTrim (و $RTrim) یه رشته میگیره و هرچی Space سمت راست رشته باشه رو حذف میکنه و رشته ی جدید رو برمیگردونه مثلا :
Debug.Print “ Visual Basic “ ‘ = “ Visual Basic“

140. SavePicture یک عکس رو میگیره و اون رو توی یک فایل ذخیره میکنه(با فرمت Bitmap) اون عکس میتونه یک Picture یا Image رسم شده ی یک فرم یا Picture Box باشه.
پنج شنبه بیست و ششم 10 1387
101. LoadResString هم واسه لود کردن یه Resource رشته هستش.فقط هم آیدی رو نیاز داره.

102. Loc با گرفتن شماره فایل باز شده برای حالت Randomشماره آخرین رکوردی که نوشته یا خونده شده ، برای حالت Binary مکان آخرین بایتی از فایل(Position) که خونده یا نوشته شده و برای ترتیبی مکان بایت فعلی در فایل تقسیم بر 128 رو برمیگردونه.

103. LOF با گرفتن شماره فایل باز شده طول اون رو برمیگردونه.

104. Log تابع لگاریتم هستش البته در مبنای Ln .برای بدست آوردن لگاریتم یک عدد توی مبنای دلخواه از این فرمول استفاده کنین :

Log(x) / Log(n)

مثلا لگاریتم 8 در مبنای 2 :

Debug.Print Log(8)/Log(2) ‘3

105. LTrim (و LTrim$) یه رشته میگیره و هرچی Space سمت چپ رشته باشه رو حذف میکنه و رشته ی جدید رو برمیگردونه مثلا :

Debug.Print “ Visual Basic “ ‘ = “Visual Basic “

106. Mid (و$Mid) واسه جدا کردن یک قسمت از یک رشته هستش.آرگومان اول رشته ی مورد نظره.دومی عددی که جدا کردن از اونجا شروع میشه و سومی هم طول قسمتیه که میخواهیم جدا کنیم و اگه مقدار دهی نکنیمش تابع تا آخر رشته رو در نظر میگیره:

Debug.Print Mid(“Visual Basic”,3,2) ‘su
Debug.Print Mid(“Visual Basic”,3) ‘sual Basic

107. MidB (و MidB$) مثل قبلیه فقط اطلاعات رو بایت به بایت در نظر میگیره و جدا میکنه (نه کاراکتر به کاراکتر).فرقش با Mid مثل فرق InStr با InStrB هستش.توی قسمت InStrB بیشتر در این باره توضیح دادم.

108. Minute یه زمان رو میگیره دقیقه رو ازش جدا میکنه.مثلا (”Minute(“02:15:00برابر 15 هستش.

109. MIRR

110. MkDir واسه درست کردن یه Folder به کار میره که اگه از قبل وجود داشته باشه تابع Error میده.

111. Month یه تاریخ میگیره و ماه رو از اون استخراج میکنه.(به طور عددی البته) مثلا Month(Date()) = 5

112. MonthName عدد یک ماه رو میگیره (1 تا 12) و اسم اون ماه رو برمیگردونه.اگه آرگومان دومش True باشه اسم رو به صورت خلاصه برمیگردونه.مثلا MonthName(10) = Octobr و MonthName(10,True) = Oct

113. Move واسه حرکت دادن فرم توی صفحه بکار میره آرگوما هاش هم مشخص هستن.

114. MsgBox هم یه پیغام توی صفحه نشون میده.آرگومان اول اجباریه و متن اون پیغام هستش.آرگومان بعدی هم مربوط به Options نشون دادن پیغام مثلا نوع آیکن(vbCritical vbExclamation vbInformation vbQuestion) نوع دکمه ها (vbOKCancel vbYesNoCancel vbOKOnly vbAbortRetryIgnore vbRetryCancel vbYesNo vbMsgBoxHelpButton) دکمه های پیشفرض (که Focus بشون داده میشه)

تغییر vbMsgBoxRight vbMsgBoxRtlReading) Alignment) نحوه ی نمایش توی صفحه (vbSystemModal vbApplicationModal) هستش.
آرگومان بعدی عنوان پیغام هستش.بعدی فایل Help مربوط به این پیغام.بعدی هم Context موضوع مورد نظره(توی فایل Help)
مقدار برگشتی تابع هم با توجه به دکمه ای که کاربر فشار داده یکی از مقدار های vbAbort vbRetry vbIgnore vbCancel vbOK vbYes vbNo هستش.

115. NPer

116. NPV

117. Oct (وOct$ ) عدد رو به مبنای هشت میبره مثلا Oct(8) = 10

118. OLEDrag واسه شروع عمل OLE Drag (مثلا مثل وقتی که یکسری فایل رو یک فولد به فولدر دیگه میکشین) برای فرم بکار میره.اگه قبلش از اسم یه شیی دیگه مثلا یه لیست باکس استفاده کرده باشین –مسلما- عمل واسه اون شی انجام میشه منظورم اینه که این فقط مختص فرم نیست.2 تا فرم بسازین.توی دومی 1 تکست باکس درست کنین خصوصیت OLEDropMode مربوط به TextBox رو Manual قرار بدین.توی فرم اول کد زیر رو وارد کنین :

Private Sub Form_Load()
Form2.Show
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
OLEDrag
End Sub

Private Sub Form_OLECompleteDrag(Effect As Long)
MsgBox "Drag completed!"
End Sub

Private Sub Form_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
AllowedEffects = vbDropEffectMove
Data.SetData Me.Caption
End Sub

و توی دومی :

Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Data.GetFormat(vbCFText) Then
Text1.Text = Data.GetData(vbCFText)
End If
End Sub

وقتی فرم یک Load میشه فرم 2 هم نشون داده میشه.حالا اگه موس رو روی فرم 1 فشار بدین OLEDrag برای فرم فراخوانی میشه و رویداد OLECompleteDrag اتفاق میفته.طبق کد حالت قابل قبول فقط vbDropEffect)Move) در نظر گرفته میشه.و اطلاعاتی هم که باید از فرم به جای مقصد انتقال پیدا کنه برابر با متن فرم میشه که هر چیزه دیگه ای با فرمت دیگه ای مثل یه فایل هم میتونه باشه.وقتی بدون اینکه دکمه ی موس رو رها کنین اون رو روی TextBox فرم دوم ببرین رویداد OLEDragDrop برای TextBox اتفاق میفته.بعد چک میشه که اگه فرمت اطلاعات متنی بود اطلاعات توی TextBox نشون داده بشه.بعد از رها کردن دکمه ی موس رویداد OLECompleteDrag (تومو شده عمل کشیدن) برای فرم اتفاق میفته و یک پیغام نشون داده میشه.

119. PaintPicture واسه رسم کردن یه عکس روی فرم هست.این تابع مال PictureBox هم هست.
آرگومان اول عکسیه که باید رسم بشه که میتونه عکسی باشه که با LoadPicture لود شده.یا عکس توی یک PictureBox(مثلا Picture1.Picture) .آرگومان دوم و سوم مختصات بالا سمت چپ جایی هستن که قرار عکس اونجا رسم بشه.مثلا اگه 0و0 باشن عکس کاملا توی بالا و سمت چپ فرم قرار میگیره یا اگه 100و20 باشن عکس با سمت چپ فرم 100 و با بالای فرم 20 تا (واحدش بر اساس واحد فرم هستش بطور پیشفرض Twip ) آرگومان های بعدی طول و عرض عکسی هستن که قرار چاپ بشه.اگه مقدار دهیشون نکنین عکس با اندازه ی اصلیش چاپ میشه.دو تا آرگومان بعدی جایی از عکس هستن که عمل رسم شدن باید از اونجا شروع بشه که اگه مثلا 100و100 باشن همه ی عکس روی فرم رسم نمیشه و از عمل رسم از بالا و سمت چپ فرم با مختصات 100و100 شروع میشه . دو تا آرگومان بعدی هم مثل قبلی واسه جدا کردن قسمتی از عکس هستن.این ها طول و عرضی از عکس رو مشخص میکنن که قرار رسم بشه.مثل قبلی ها اگه مقدار دهیشون نکنین (با توجه به 2 تا آرگومان قبلی) همه ی قسمت ها در نظر گرفته میشه.آرگومان آخر هم نحوه ی رسم هست(از نظر رنگ) که میتونه یکی از مقدار های زیر باشه :
vbSrcCopy عکس جدید رو کاملا جایگزین عکس قبلی میکنه یعنی اگه از قبل توی فرم عکسی وجود داشته باشه هیچ
اثری ازش نمیمونه.
vbSrcAnd عکس مبدا و مقصد(در صورت وجود) رو AND میکنه (دو عکس ادغام میشن)
vbNotSrcErase عکس و مبدا و مقصد(در صورت وجود) رو OR میکنه و نتیجه رو Invert میکنه.
vbSrcPaint عکس مبدا و مقصد(در صورت وجود) رو OR میکنه.
vbDstInvert عکس مقصد (در صورت وجود) رو Invert میکنه.
vbSrcInvert عکس مبدا و مقصد(در صورت وجود) رو XOR میکنه.
vbSrcErase عکس مقصد(در صورت وجود) رو Invert (معکوس) میکنه و با عکس مبدا AND میکنه.
vbNotSrcCopy عکس مبدا رو Invert میکنه و کاملا جایگزین عکس مقصد میکنه.

برای اینکه بهتر متوجه بشین همه رو امتحان کنین.

120. Partition چهار تا عدد به عنوان شروع(Start) ،پایان(Stop) فاصله(Intrerval) و عدد مورد نظر(Number) میگیره و یک سیری از اعداد به صورت

Start + (n-1) * Interval تا Start + n * Interval -1 …………… Start + (n-1) * Interval تا Stop

تا رسیدن به مقدار Stop میسازه.مثلا اگه Start=1 , Stop=110 ,Interval=20 اینطوری میشه :

1…20 21…40 41…60 61…80 81…100 101…110

حالا تابع عددی که بش دادیم(Number) رو بررسی میکنه که جزو کدوم یک از این بازه ها(بازه های بسته) هستش.جزو هر کدوم که بود تابع یه رشته به صورت بالاترین عضو : پایین ترین عضو برمیگردونه.مثلا اگه عدد 52 یا 60 باشه تابع مقدار “41:60” رو برمیگردونه.اگه عددی که بش میدیم کمتر از کمترین عضو سری باشه تابع مقدار “ : [Start -1] ” رو برمیگردونه مثلا اینجا برای 3- تابع مقدار “ : 0 ” رو برمیگردونه و اگه بزرگ تر باشه “[Stop + 1] : ” رو برمیگردونه.
پنج شنبه بیست و ششم 10 1387
81. IsArray هم از اسمش پیداست.یک متغیر میگیره و مشخص میکنه آرایه هست یا نه.

82. IsDate هم مثل قبلیه فقط برای تاریخ یا زمان.

83. IsEmpty برای اینه که چک کنیم یک مقدار اعلان شده یا نه.مثلا

Dim x as long
Debug.Print IsEmpty(x) ‘False
Debug.Print IsEmpty(y) ‘True
x = Empty
Debug.Print IsEmpty(x) ‘True

84. IsError هم واسه اینه که چک کنیم یه مقدار از نوع Error هستش یه یا نه.مثلا IsError(Err) = True یا IsError(CVErr(0))= True

85. IsMissing این تابع برای وقتی به کار میره که شما توی یه Function یا Sub که آرگومان اختیاری(Optional)از نوع Variant داره میخواهین ببینین که اون آرگومان مقدار دهی شده یا نه.این مثال رو ببینین:

Private Sub Command1_Click()
MsgBox TestIsMissingFunc()
MsgBox TestIsMissingFunc(2)
MsgBox TestIsMissingFunc(“A”)
End Sub

Private Function TestIsMissingFunc(Optional testArg As Variant) As String
If IsMissing(testArg) Then
TestIsMissingFunc = “You are not passed any value!”
Else
TestIsMissingFunc = “You are passed “ & CStr(testArg)
End If
End Function

مقدارهایی که با پیغام نشون داده میشن به این صورته :

You are not passed any value
You are passed 2
Your are passed A

یعنی اگه اون پارامتر اختیاری مقدار دهی نشده باشه تابع IsMissing مقدار True رو برمیگردونه.اگه پارامتری از نوع غیر از Variant بهش بدین همواره مقدار False رو برمیگردونه.

86. IsNull واسه اینه که بفهمیم یک مقدارNull هست یا نه. توجه کنین که Null با خالی بودن یه رشته یا 0 بودن یه عدد فرق داره.مثلا

Deug.Print IsNull(“”) ‘false
Dim S As String
Debug.Print IsNull(S) ‘false
S = “”
Debug.Print IsNull(S) ‘false
S = Null
Debug.Print IsNull(S) ‘True

87. IsNumeric چک میکنه که یه مقدار عدد هست یا نه .البته کاری به نوعش نداره و محتویاتش رو بررسی میکنه مثلا:

Debug.Print IsNumeric(2) ‘true
Debug.Print IsNumeric("2.2") ‘true
Dim v As Variant
v = "$2.2"
Debug.Print IsNumeric(v) ‘true
v = “vb6”
Debug.Print IsNumeric(v) ‘false

88. IsObject هم چک میکنه یه مقدار از نوع Object هستش یا نه مثلا :

Private Sub Command1_Click()
Debug.Print IsObject(Command1) ‘true
Debug.Print IsObject(Err) ‘true
Dim Obj As Object, v As Variant
Debug.Print IsObject(Obj) ‘true
Debug.Print IsObject(v) ‘false
Set v = Err
Debug.Print IsObject(v) ‘true
Debug.Print IsObject("s") ‘false
End Sub

89. Join یه آرایه از نوع رشته میگیره و همه مقدار های عضو های آرایه رو به هم متصل میکنه و به صورت یه متغیر از نوع رشته بیرون میده.بین هر کدوم از String ها رو هم با کاراکتر دلخواهی که بهش میدیم قرار میده(بطور پیشفرض فاصله)
مثلا :

Private Sub Command1_Click()
Dim words(3)
words(0) = "Learning"
words(1) = "VB"
words(2) = "is"
words(3) = "easy"
Debug.Print Join(words, "_") ‘ Learning_VB_is_Easy
End Sub

90. Kill آدرس یه فایل رو میگیره و اون رو پاک میکنه.

91. LCase (و LCase$) (مخففLower Case)یک رشته رو میگیره و همه حروف رو به حروف کوچک تبدیل میکنه و رشته جدید رو برمیگردونه مثلا ”LCase(“Visual”)=”visual

92. Left (وLeft$)یک رشته رو میگیره و به تعداد دلخواه کاراکتر از سمت چپ جدا میکنه مثلا :

Left("Visual",2) = "Vi"

93. LeftB (و LeftB$) یک رشته رو میگیره و به تعداد دلخواه بایت از سمت چپ جدا میکنه.مثلا

LeftB("Visual", 2)="V"

چون هر کاراکتر 2 بایت حساب میشه.

94. Len یه مقدار میگیره و طولش رو برمیگردونه.برای رشته تعداد کاراکتر ها رو . برای متغیر عددی هم تعداد بایتی که متغیری که عدد رو شامل میشه اشغال کرده رو برمیگردونه نه تعداد ارقام رو(مگر اینکه قبلش عدد رو به رشته تبدیل کنین) مثلا :

Debug.Print Len("visual") ‘8
Dim n As Integer: n = 245
Debug.Print Len(n) ‘2
Debug.Print Len(CStr(n)) ‘3

Dim V As Variant
Debug.Print Len(V) ‘0
Set V = Command1
Debug.Print Len(V) ‘4

95. LenB تعداد بایتی که یه متغیر(یا یک مقدار) اشغال کرده رو برمیگردونه.مثلا :

Debug.Print LenB("visual") ‘12
Dim n As Integer: n = 245
Debug.Print LenB(n) ‘2
Debug.Print LenB(CStr(n)) ‘6
Dim V As Variant
Debug.Print LenB(V) ‘0
Set V = Command1
Debug.Print LenB(V) ‘8

96. Line واسه رسم یه خط یا مستطیل روی فرم بکار میره.آرگومان اول مختصات نقطه شروع و پایان خط و یا مختصات بالا سمت چپ و پایین سمت راست مستطیل هستش.بعدی رنگ خط و مستطیل هستش.بعدی اگه B باشه مستطیل رسم میشه.اگه BF باشه مستطیل توپر رسم میشه.اگه هم مقدار دهی نکنینش خط رسم میشه.مثلا :

Line (0, 0)-(300, 300), vbRed, BF ‘مستطیل توپر قرمز
Line (0, 0)-(300, 300), vbRed ‘خط قرمز

97. Load یه فرم یا Control رو توی حافظه Load میکنه.

98. LoadPicture یک عکس رو توی حافظه Load میکنه و مشخصات اون رو توی یک متغیر از نوع IPictureDisp برمیگردونه.اگه آرگومان اول رشته ی خالی باشه تابع یه عکس خالی برمیگردونه.آرگومان های بعدی فقط برای فایل های آیکن و کرسر هستن:دومی سایز هستش.که یکی از مقدار های زیر میتونه باشه :
vbLPLarge که اندازه آیکن یا کرسر برابر اندازه آیکن یا کرسر بزرگ پیشفرض سیستم میشه.
vbLPSmall که اندازه آیکن یا کرسر برابر اندازه آیکن یا کرسر کوچک پیشفرض سیستم میشه.
vbLPSmallShell اندازه ایه که توی قسمت Caption Buttons size setting توی قسمت AppearRance مربوط بهDisplay propertiesتنظیم شده.
vbLPLargShell اندازه ایه که توی قسمت Icon size setting توی قسمت AppearRance مربوط بهDisplay properties تنظیم شده.
vbLPCustom اندازه بر اساس 2 تا آرگومان x و y تنظیم میشه.

آرگومان بعدی (ColorDepth) عمق رنگ هستش که یکی از مقدار های زیر میتونه باشه :
vbLPDefault مقدار پیشفرض هستش.

vbLPMonochromeدو رنگ
vbLPVGAColorشونزده رنگ
vbLPColor دویست و پنجاه وشش رنگ

2 تا آرگومان بعدی هم طول و عرض هستن.که فقط برای وقتی که آرگومان size برابر vbLPCustom باشه استفاده دارن.
یکباره دیگه هم بگم که آرگومان های 2 به بعد این تابع فقط واسه فایل های آیکون و کرسر هستن.

99. LoadResData اآیدی یک Resouce و نوع اون رو میگیره و اطلاعاتش رو برمیگردونه.مثلا (”LoadResData(101,”CUSTOM
واسه ویرایش Resource های برنامه از منوی Add-Ins گزینه ی Add-In Manager رو انتخاب کنین.اونجا توی لیست روی VB6 Resource Editor کلیک کنین تا جلوش متن Loaded بیاد.OK کنین تا پنجره بسته شه.حالا از منوی Tools گزینه ی Resouce Editor رو انتخاب کنین.توی پنجره ای که باز میشه میتونین Resource های مختلف برای برنامتون بسازین...

100. LoadResPicture مثل قبلیه منتها واسه Load کردن Picture هستش.چه Icon چه Bitmap و چه Cursor . آرگومان اولیش آیدی Resource هستش .دومی هم یکی از سه نوعی که گفتم یعنی vbResBitmap ، vbResIcon و vbRescCursor .مقداری برگشتیش هم از نوع Picture هستش(IPictureDisp)
پنج شنبه بیست و ششم 10 1387
 مثل قبلیه هست با این فرق که درصد عددی که بهش میدیم رو حساب میکنه.مثلا :

FormatPercent(-10 / 100, 4, vbFalse, vbFalse, vbFalse) = -10.0000%

FreeFile .62 اولین شماره ای که برای باز کردن فایل ها آماده باشه (آزاد باشه) رو برمیگردونه.حداکثر هم 255 فایل میتونن باز باشن.

FV .63

GetAllSettings .64 این تابع همه ی تنظیماتی که توی Section و appName ی که بش میدیم ذخیره شده رو به صورت یه آرایه 2 بعدی برمیگردونه.(بهتره اول SaveSetting رو ببینین) ما این مقدار رو توی یه متغیر از نوع Variant قرار میدیم.به طوری که (v(0,0 اسم اولین تنظیممون(یا همون اسم Value توی رجیستری یا همون Key توی تابع SaveSetting) هستش و (v(0,1 مقدار اون تنظیم.به همین ترتیب v(1,0) هم اسم دومین تنظیم میشه... .

GetAttr .65 هم با گرفتن آدرس فایل Attribute های اون فایل رو برمیگردونه.

GetObject .66 شبیه CreateObject کار میکنه با این فرق که نام فایل رو هم میتونه بگیره و معمولا برای ارتباط با برنامه هایی بکار میره که از قبل اجرا شدن ولی CreateObject یه رابط به instance جدید اون Application ایجاد میکنه و وقتی استفاده میشه که نمیدونیم برنامه از قبل اجرا شده یا نه.مثلا میخواهیم یه شی word رو با CreateObject درست کنیم :

Private Sub Command1_Click()
Dim wApp As Object,wDoc as Object
Set wApp = CreateObject("word.application")
Set wDoc = wApp.Documents.Add
wApp.Selection.Font.Name = "verdana"
wApp.Selection.TypeText "Hello!!"
wDoc.SaveAs "D:\w1.doc"
wDoc.Close
Set wDoc = Nothing
Set wApp = Nothing
End Sub

با این کد فایل w1.doc توی درایو ِD ساخته میشه که محتویایش متن Hello!! هستش.به جای CreateObject میشد از GetObject به این صورت استفاده کرد :

Set wApp = GetObject(, "word.application")

چون میخواستیم فایل جدیدی ایجاد کنیم نیاز به دادن آدرس فایل نبود واسه همین فقط آرگومان دوم رو مقدار دهی کردیم.
حالا میخواهیم توی فایلی که درست کردیم یه متن تایپ کنیم.اول اون فایل رو با word باز کنین .اینبار از GetObject استفاده میکنیم :

Private Sub Command1_Click()
Dim wApp As Object
Set wApp = CreateObject("D:\w1.doc").Application
wApp.Documents(1).Application.Selection.TypeText " how are you ?"
Set wApp = Nothing
End Sub

به این صورت ما تونستیم با GetObject با برنامه Word ارتباط برقرار کنیم.

GetSetting .67 با گرفتن appName و Section و Key ، اطلاعاتی رو که با تابع SaveSetting توی رجیستری ذخیره شده رو برمیگردونه(به توضیح SaveSetting توجه کنین) آرگومان چهارم هم مقداریه که اگه اطلاعات مورد نظر توی رجیستری پیدا نشد تابع اون رو برمیگردونه.

Hex .69 (و Hex$) هم با گرفتن یک عدد معادل اون رو به مبنای 16 برمیگردونه مثلا Hex(255) = “FF”

70. Hide فرم رو پنهان میکنه و واسه نشون دادنش باید از Show استفاده کنین (این تابع ها هر دو عضو های Form هستن و اگه توی یه ماژول یا کلاس دارین کد مینویسین باید اسم فرم مورد نظر رو هم بیارین مثلا ()Form1.Hide)

71. Hour زمان رو میگره و ساعت رو از اون استخراج میکنه .مثلا Hour ("19:12:03") = 19

72. IIf یک If…Then…Else یک خطی هستش.آرگومان اول همون عبارتیه که میخواهیم درستیش رو بررسی کنیم.آرگومان دوم و سوم هم مقدار های بازگشتیه تابع هستش.اگه عبارتی که به تابع دادیم درست باشه آرگومان دوم و گرنه آرگومان سوم رو برمیگردونه.مثلا

IIf(2+2 = 4, "Yes", "No") = "Yes"

73. IMEStatus توی ویبی 6 وضعیت Input Method Editor رو برمیگردونه که فقط توی ویندوز های چینی و کره ای و ژاپنی کاربرد داره.

74. InputBox یه Input Box یا همون Prompt رو باز میکنه و یه ورودی از کاربر میگیره.آرگومان اول اون متنی هستش که توی Prompt نشون داده میشه و حتما باید مقدار دهی بشه ولی آرگومان های بعدی اختیاری هستن.
دومی Title یا همون عنوان پنجره Prompt هستش.سومی هم متنیه که به طور پیشفرض توی TextBox ی که توی InputBox هست نمایش داده میشه.2 تا آرگومان بعدی هم مختصات پنجره InputBox هستن.آرگومان بعدی (HelpFile) فایل Help ی که مربوط به این InputBox هستش.بعدی هم Context اون موضوعیه که میخواهین نشون بدین.مقدار برگشتی تابع همون مقداریه که کاربر وارد میکنه اگر هم کاربر Cancel رو بزنه مقدار برگشتی یه رشته خالیه (vbNullString).

75. InStr برای جستجوی یک متن توی یک متن دیگه بکار میره.آرگومان اول جاییه که جستجو توی رشته از اونجا شروع میشه. اگه 1 بگذارین جستجو از اولین کاراکتر شروع میشه میتونین هم مقداری به این آرگومان ندین.دومی رشته ی مبدا هستش یعنی رشته ای که میخواهین توش جستجو کنین.آرگومان بعدی رشته مقصد هست یعنی اون متن ی که میخواهین جستجوش کنین.آرگومان بعدی هم نوع مقایسه هستش.اگه از vbBinaryCompare استفاده کنین بین حروف کوچک و بزرگ تفاوت گذاشته میشه و اون ها مساوی حساب نمیشن (Case Sensitive) اگه از vbTextCompare استفاده کنین حروف بزرگ و کوچک یکی حساب میشن. vbDatabaseCompare هم مربوط به Access هستش و کاری بهش نداریم.مثلا InStr(1,”Visual Basic”,”b”,vbTextCompare) مقدار هشت رو برمیگردونه در صورتی که اگه از vbBinaryCompare استفاده کنین یا اصلا این آرگومان رو مقدار دهی نکنین مقدار 0 نشون داده میشه.یعنی رشته ی مورد نظر پیدا نشد! یا مثلا اگه به جای 1 از 9 استفاده کنین جستجو از حرف نهم یعنی a شروع میشه و چون حرف b بعد از a (منظور دومین a هستش که بعد از b قرار داره) قرار نداره تابع b رو پیدا نمیکنه و مقدار 0 رو برمیگردونه.

این رو هم بگم که ویبی به طور پیشفرض Case Sensitive هستش و حروف بزرگ و کوچک مساوی نیستن یعنی “VB” <> “Vb” اما اگه کد Option Compare Text رو اول کدها(بالای فرم یا ماژول) بزارین این حساسیت ویبی از بین میره.

76. InStrB مثل قبلیه با این فرق که واسه داد های بایتی که توی یک رشته قرار گرفتن استفاده میشه و محل بایت (Byte Position)رو برمیگردونه.مثلا چون یه کاراکتر توی رشته ی معمولی 2 بایت حساب میشه (از لحاظ طول رشته ای 1 هست اما از لحاظ طول بایت 2) مقدار (”InStrB(1,”Visual Basic”,”B برابر 15 هستش.

77. InStrRev مثل InStr هستش با این فرق که جستجو رو از آخرین کاراکتر رشته ی که بش دیدیم شروع میکنه و به اولین کاراکتر میرسه.(برعکس قبلی)آرگومان اول رشته مبدا دومی رشته ی مقصد و سومی هم شروع جستجو هست که به طور پیشفرض -1 هستش یعنی جستجو از آخرین کاراکتر.آرگومان بعدی هم مثل آرگومان آخر InStr.مثلا (”InStrRev(“VisualBasic”,”a برابر 8 هستش نه 5.ولی ( InStrRev("VisualBasic", "a", 7 برابر 5 هستش چون جستجو از حرف B شروع میشه و به سمت اولین کاراکتر میره.

78. Int براکت یک عدد رو برمیگردونه.مثلا Int(2.2) = 2 و Int(-2.2) = -3

79. IPmt

80. IRR
پنج شنبه بیست و ششم 10 1387
Day .41 روز یک تاریخ رو برمیگردونه.مثلا (Day(Now عدد 5 رو برمیگردونه.

DDB .42

DeleteSetting .43 تنظیماتی که با تابع SaveSetting توی رجستری ذخیره شده (value ها)رو پاک میکنه.واسه توضیح بیشتر به SaveSetting مراجع کنین.

Dir .44 فایل ها و فولدر های داخل یه فولدر(یا درایو) رو برمیگردونه.که میشه با مشخص کردن Attribute فایل ها یا فولدر های خاص رو بدست آورد.آرگومانی که میگیره یه رشتس که Path مورد نظر هستش که میشه توش از کاراکتر هایی مثل * و ؟ هم استفاده کرد.
مثلا میخوامیم همه ی فایل های با پسوند .sys رو که توی درایو C هستن بدست بیاریم.
برای اولین بار تابع Dir رو با دادن مقدار “C:\*.sys” فراخوانی میکنیم.مقدار برگشتیش اولین فایل با پسوند bat هست که توی درایو C (فقط درایو C یعنی شامل SubDirectory ها نمیشه) پیدا میکنه.برای بدست آوردن دومین فایل تابع رو بدون دادن مقدار بهش فراخوانی میکنیم ()Dir که مقدار برگشتیش همون دومین فایل هستش.این کار رو تا زمانی که مقدار برگشتی "" (رشته ی خالی) نباشه ادامه میدیم.کدش به این صورت میشه:

Private Sub CmdPrintDirs_Click()
Dim strPath as String,strDir as String
strPath = "C:\*.sys"
strDir = Dir(strPath)
Do
Print strDir
strDir = Dir()
Loop While strDir <> ""
End Sub

البته اگه Attribute رو درست تعیین نکنین همه فولدر ها و فایل ها برگردونده نمیشن.مثلا با قرار دادن این مقدار :
vbArchive Or vbDirectory Or vbHidden Or vbNormal Or vbReadOnly Or vbSystem
به جای Attribute میشه گفت همه فایل ها و فلدر ها (چه سیستم چه معمولی و...) برگردونده میشن.برای بدست آوردن فقط Directory ها به این صورت عمل کنین که به Attribute ، vbDirectoy رو هم اضافه کنین. بعد از اینکه اسم دایرکتوری ها رو گفتین باز هم با تابع GetAttr چک کنین که اسمی که برگردونده شده حتما Directory هستش :

Private Sub CmdPrintDirs_Click()
Dim strPath As String, strDir As String
strPath = "C:\"
strDir = Dir(strPath, vbDirectory)
Do
If (GetAttr(strPath & strDir) And vbDirectory) = vbDirectory Then
Print strDir
End If
strDir = Dir()
Loop While strDir <> ""
End Sub

اینو نگفتم که اگه بعد از مسیری که مشخص کردین اینجا (\:c) چیزی نگذارین همه فایل ها و فولدر هاش در نظر گرفته میشن.

DoEvents .45 این تابع رو وقتی دارین توی برنامتون از یک حلقه تکرار که ممکنه تموم شدنش طول بکشه استفاده میکنین توی حلقه فراخوانی کنین.حالا چکار میکنه؟
بطور عادی وقتی دارین توی یه حلقه تکرار(یا هر کدی!!) یکسری محاسبات رو انجام میدین تا زمانی که حلقه تموم نشه برنامتون در مقابل Message هایی که بش ارسال میشه عکس العملی انجام نمیده و همه عکس العمل ها رو بعد از تموم شدن حلقه انجام میده و یا اگه شما توی حلقه یه کدمربوط به چاپ کردن یه رشته روی فرم رو نوشته باشین عمل چاپ شدن رو بعد از تمام شدن حلقه مشاهده میکنین.به قولی تا زمان پایان حلقه برنامه هیچ Event ی انجام نمیده(البته این مساله 100 در 100 هم نیست).تابع DoEvents این کار رو براتون میکنه.این دو کد رو تست کنین :

Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
Loop
End Sub
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
DoEvents
Loop
End Sub

وقتی دکمه رو توی کد اول فشار میدین تا زمانی که حلقه تموم نشده نمیتونین اعضای اضافه شده رو توی لیست باکس ببینین یا فرم رو حرکت بدین.در صورتی که در کد دوم این طور نیست.

46. Environ (و Environ$) این تابع با گرفتن عدد ها(اینجا index ها) ی بیشتر از 0 و یا رشته ها اطلاعات خاصی از سیستم مثل دایرکتوری ویندوز Program Files ، Temp و یا UserName یا تعداد پردازشگر ها و ... رو برمیگردونه.با دادن عدد های مختلف از 1 به بالا مقدار های مختلفش رو میتونین ببینین.رشته هایی رو هم میگیره مثل WinDir یا OS یا SystemDrive یا ... که این رشته ها رو با استفاده از اعداد میتونین بدست بیارین :

Private Sub Command1_Click()
Dim strEv As String, i As Integer
i = 1
Do
strEv = Environ(i)
Print strEv
i = i + 1
Loop While strEv <> ""
End Sub

EOF .47 برای کار با فایل هاست که با دادن شماره ای که باهاش فایل رو باز کردین میتونین بفهمین به آخر فایل رسیدین یا نه.

Err .48 آبجکتیه که اطلاعات مربوط به آخرین خطایی(منظور Runtime Error) که توی کد اتفاق افتاده رو نگه میداده.مثلا :
Err.Number شماره خطا Err.Clear پاک کردن خطا (همه اطلاعات در مورد آخرین حذف میشه و فرض بر این میشه که خطایی اتفاق نیفتاده باشه) Err.Description توضیح خطا Err.Source منبع خطا.Err.Raise هم یه خطا تولید میکنه!!

Error .49 اگه این تابع رو برابر یه مقدار قرار نداره باشین کار Err.Raise رو میکنه با این فرق که فقط شماره خطا رو میگیره(به تعداد آرگومان هایی که میگیرن توجه کنین) (در این حالت میشه گفت اصلا تابع نیست!) در غیر این صورت توضیح خطایی که تولید کرده رو هم برمیگردونه

Error$ .50 فقط حالت دوم Error هستش

Exp .51 معادلش توی ریاضی e x

FileAttr .52 با گرفتن شماره ای که فایل باش باز شده Attribute هاش رو برمیگردونه.مثلا :

Private Sub Command1_Click()
Open "C:\io.sys" For Random As #1
If FileAttr(1) And vbSystem Then
MsgBox "This is a Syetem file!"
End If
Close #1
End Sub

FileCopy .53 واسه کپی کردن فایل هستش که آرگومان اولی آدرس فایل مبدا و بعدی مقصده.اگه فایل مقصد وجود داشته باشه عمل کپی انجام نمیشه.

FileDateTime آدرس یه فایل رو میگیره و زمان آخرین ویرایش یا زمانی که درست شده رو برمیگردونه.

FileLen .54 آدرس یه فایل رو میگیره و طولش رو برمیگردونه.(به بایت)

Fix .55 یه چیزی شبیه تابع براکت توی ریاضی هستش با این فرض که اعداد منفی رو رو به بالا گرد میکنه .مثلا:

Fix(2.1) = 2 و Fix(-2.1) = -2

Filter .56 یه آرایه رشته ای میگیره و آرایه ی جدیدی رو برمیگردونه به طوری که اون آرایه شامل عضو هایی از آرایه ی اول میشه که یک رشته ی خاص رو دارا هستن یا دارا نیستن.(تابع 2 حالت داره).آرگومان اول آرایه مورد نظره.دومی رشته ی مورد نظره.سومی اگه False باشه اون عضو هایی که شامل رشته نیستن انتخاب میشن و برگردونده میشن و اگه True باشه عضو هایی که شامل رشته هستن.بعدی هم نوع مقایسه هست که توی توضیح تابع InStr درموردش توضیح دادم.اونجا رو ببینین.
مثلا این آرایه رو تصور کنین :

Dim MainArr(3) As String
MainArr(0) = “Visual Basic”
MainArr(1) = “Visual C++”
MainArr(2) = “W32 Assembly”
MainArr(3) = “Java Script”

حالا ما میخوایم همه ی اون عضو هایی از MainArr که کلمه ی Visual داخلشون نیست رو توی یک آرایه دیگه ذخیره کنیم :

Dim NewArr() As String
NewArr = Filter(MainArr,”Visual”,False)

با این کد عضو های آرایه NewArr ، W32 Assembly و Java Script میشن.اگه به جای False از True استفاده میکردین عضو ها Visual Basic و++ Visual C میشدن.

Format .57 (و Format$)یه تابع پر کاربرده که کارهای زیادی در رابطه با رشته ها میکنه و اگه بخوام همشونو بگم به اندازه ای که تاحالا نوشتم باید بنویسم!!در کل یه رشته به عنوان آرگومان اول میگیره.دومی هم یه رشتس که Style یا حالت یا همون فرمت اون رشته رو تعیین میکنه .مثلا میخواهین با داشتن ثانیه – دقیقه و ساعت،زمان رو با فرمت درست بدست بیارین :

MsgBox (Format("125802", "00:00:00"))

و کار های زیاد دیگه ای میشه باش کرد که بیشتر از این حال نداریم توضیح بدم.خودتون دنبالش برین میفهمین... .

FormatCurrency .58 این تابع یه عدد رو به نوع Currency (نوعی که توی ویبی برای نگه داشتن مقدار پول بکار میره) با فرمت دلخواه تبدیل میکنه.آرگومان اول عدد مورد نظره.آرگومان های بعدی اختیاری هستن: دومی تعداد صفرهایی که بعد از عدد و نقطه ی آخر اون نشون داده میشن هستش که بطور پیشفرض 1-(Default) هستش و برای من 2 تا نشون میده مثلا 100 رو 100.00 نشون میده.

آرگومان بعدی مشخص میکنه که برای عدد های کسری .0 قبل از عدد رو نشون بده یا نه.بعدی مشخص میکنه که برای عدد های منفی از پرانتز استفاده بشه یا نه.بعدی مشخص میکنه که عدد هارو (سه تا سه تا) با کاما گروه بندی کنه یا نه.مثلا 100000 رو 10,000 نشون بده یا نه.یه مثال کلی : FormatCurrency(10000,3,vbTrue,vbTrue,vbTrue)مقدار 10,000.000$ رو برمیگردونه.
این رو هم بگم که آرگومان های 3 ، 4 و 5 به غیر از vbTrue و vbFalse مقدار vbUseDefault رو هم میتونن بگیرن که این مقدار به مقدار بیشفرض که به تنظیم های ویندوز بستگی داره ارجاع میکنه.

FormatDateTime .59 این تابع واسه تغییر فرمت زمان و تاریخ به کار میره.آرگومان اول تاریخ یا زمان مورد نظره .دومی هم فرمت مورد نظر.مقدار بازگشتی با توجه به نوع فرمت و نوع مقداری که بش دادیم فرق میکنه :

FormatDateTime(Now(), vbGeneralDate) = 10/5/2005 10:49:07 PM

FormatNumber .60 مثل FormatCurreny هستش با 2 تا فرق.یکی اینکه علامت دلار ($) کنار عدد نمیگذاره. یکی دیگه اینکه اگه مقدار منفی باشه و آرگومان 3 False ، علامت منفی رو کنار عدد نشون میده.
پنج شنبه بیست و ششم 10 1387
اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )
ChrW .21 (و ChrW$) واسه کاراکتر های Unicode استفاده میشه.یعنی کد یه کاراکتر Unicode (فکر کنم بین 0 تا 2 بتوان 16) رو میگیره و یه کاراکتر Unicode برمیگردونه

CInt .22 تبدیل نوع یه مقدار به Integer

Circle .23 واسه رسم یه دایره ، بیضی ، قطاع یا کمان روی فرم هستش.مثلا
Circle(20,20),10,vbred,0,3.141,2 یه کمان با مرکز 20و20 و با شعاع 10 با رنگ قرمز از 0 تا پی رو طوری رسم میکنه که ارتفاعش 2 برابر عرضش هستش.برای رسم قطاع باید ارگومان های 4 و 5 منفی باشن.واسه رسم دایر بعد از vbred نیاز نیست مقدار بزارین.واسه رسم بیضی(کامل) آرگومان های 4 و 5 رو مقدار ندین در عوض با تغییر دادن آرگومان 6 میتونین بیضی های مختلفی رسم کنین.

Clng .24 واسه تغییر نوع یه مقدار به Long هستش

Cls .25 مثل دستور معادلش توی داس هستش.یعنی فرم رو پاک میکنه.

Command .26 و Command$ اون پارامتر هایی که به برنامه ارسال شدن رو برمیگردونن.مثلا وقتی برنامه رو با دستور
Project1.exe “-hidden” باز کنیم Command برابر “hidden-” میشه.

Cos .27 کسینویس زاویه ای که –بر حسب رادیان – بهش میدیم رو برمیگردونه.

CreateObject .28با گرفتن ClassName یک شی رو درست میکنه.مثلا

Set fso = CreateObject("Scripting.FileSystemObject")

آبجکت معروف FSO رو دست میکنه که خیلی هم توی ASP کاربرد داره.حالا که این آبجکت رو ساختین میتونین ازش استفاده کنین.مثلا واسه بدست آوردن پوشه temp :

MsgBox fso.getspecialfolder(2)

بعد از اینکه کارمون با شی تموم شد باید حافظه ای که بش اختصاص پیدا کرده رو آزاد کنیم :

Set FSO = Nothing

CSng .29-30 و CStr واسه تبدیل نوع یه مقدار به Single و String هستن.

CDir .31 و CDir$ هم دایرکتوری پیشفرض رو برمیگردونن(واسه توضیح بیشتر یه سر به chDir بزنین)

CVar .32 واسه تبدیل نوع یه مقدار به Var هست

CVDate .33 واسه تبدیل یه مقدار(رشته یا عدد) به نوع Date بکار میره.

CVErr .34 یه شماره خطا یا یه آبجک از نوع ErrObject میگیره و یه مقدار از نوع Error برمیگردونه مثلا : “Cstr(CVErr(13)) = “Error 13
اما اینکه به چه درد میخوره نمیدونم.اینم توضیح : MSDN

The CVErr function in Visual Basic 6.0 returned a Variant of the subtype Error that contained an error number

DateAdd .35 واسه کم یا زیاد کردن یه مقدار از یه تاریخ یا ساعت بکار میره.آرگومان اولی نوع مقداری که میخواهیم کم یا زیاد کنیم هستش که باید یکی از اینا باشه : s ثانیه n دقیقه h ساعت w روزهای هفته w هفته d روز(مثل 12) y روز از سال(مثل 224) m ماه q یک چهارم سال(فصل) yyyy سال.آرگومان دومی مقداریه که میخواهیم اضافه یا کم کنیم مثل 2 1 ... .آرگومان بعدی زمان یا تاریخ مورد نظره.
مثلا (()DateAdd(“m”,3,Date سه ماه به تاریخ فعلی(()Date) اضافه میکنه و تاریخ جدید رو برمیگردونه.

DateDiff .36 برای مقایسه کردن یکی از قسمت های 2 مقدار تاریخ هستش.ارگومان اول همون قسمت مورد نظره که مثل تابع قبلی مقدار دهی میشه.آرگومان دوم تاریخ1 بعدی تاریخ 2 هستش.مثلا (()DateDiff(“yyyy”,Date(),DateAdd(“yyyy”,3,Date مقدار 3 رو برمیگردونه.

DatePart .37 یک قسمت از یک تاریخ ( یا زمان) رو برمیگردونه.آرگومان اول مثل 2 تابع قبلیه.دومی هم تاریخ مورد نظر.مثلا (()DatePart(“h”,Time الان برای من 17 رو برمیگردونه (ساعت 5 بعد از ظهر).

DateSerial .39 روز و ماه و سال رو به عدد میگیره و تاریخ رو برمیگردونه.

DateValue .40 کار قبلی رو میکنه فقط مقدار رو یکجا(از نوع رشته) میگیره.مثلx (“DateValue(“2002/09/11 رو میگیره و تاریخ رو از نوع Date برمیگردونه.
پنج شنبه بیست و ششم 10 1387
اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )

Abs .1 قدر مطلق یک عدد رو برمیگردونه

appActivate .2 عنوان یه پنجره رو میگیره و اونو فعال میکنه

Asc .3 یه کاراکتر میگیره و کد اسکی اون رو برمیگردونه (بین 0 تا 255) .اگه بهش رشته بدین کاراکتر اول رو بررسی میکنه .مثلاAsc(“A”)= 65

AscB .4 کار قبلی رو با بایت اول مقداری که بش میدیم انجام میده(نه با کاراکتر اول).خروجیش هم از نوع Byte هستش(قبلی Integer بود)

AscW .5 واسه کاراکتر های Unicode هستش یعنی مقدار کد کاراکتر Unicode (w مخفف Wide هستش) رو برمیگردونه که بین 0 تا 2 بتوان 16

Atn .6 آرک تانژانت مقداری رو که بش دادیم برمیگردونه.البته زاویه رو بر حسب رادیان برمیگردونه که اگه میخواهین بر حسب درجه بکنینش باید ضرب در 180 تقسیم بر پی بکنینش مثلا (180 * 3.14 * 1) Atnمقدار 45.0228246533569 رو برمیگردونه
البته برای بدست آوردن مقدار دقیق تر پی از (Atn(1) * 4) میتونین استفاده کنین.

Beep .7 صدای beep در میاره.

CallByName .8 با این تابع میشه با استفاده از اسم یه متد یا Property مربوط به یه شی که توی یه رشته هست متد رو فراخوانی کرد یا Property رو گرفت یا مقدار داد و ... .آرگومان اول شی مورد نظره مثل Command2 دومی متد یا Property مورد نظره مثل “Set Focus” یا “Caption” سومی نوع فراخوانییه که میخوانیم انجام بدیم .مثل vbLet مقدار دهی یه Property یا VbMethod واسه یه متد و ... .بعدی هم آرگومان هایی هستن که به اون متد باید ارسال بشن یا اگه بخواهیم Property رو عوض کنیم اون مقدار مورد نظرمون هست.اگه هم نیازی به آرگومان نباشه خالی میزاریمش.مثلا با این دستور :

CallByName Command2, "setFocus", VbMethod

فوکوس به Command2 اختصاص داده میشه یعنی کاره Command2.SetFocus رو میکنه.یا با این دستور :

CallByName Command2, "Caption", VbLet, "MyCaption!"

مقدار Caption دکمه 2 برابر MyCaption میشه

9 ta 14 . Cbool ، Cbyte،CCur ،CDate ، CDbl،CDec توابع تبدیل نوع هستن و نوع مقداری که میگیرن رو به نوعی که از اسمشون پیداست تبدیل میکنن مثلا CBool مقداری گه بش دادیم رو به نوع Boolean تبدیل میکنه.

chDir .15 دایرکتویری پیشفرض رو برای هر درایو عوض میکنه.مثلا (“chDir(“C:\windows دایرکتوری پیشفرض درایو C رو C:\Windows میکنه.بعد از این کد اگه تابع (“CurDir(“C رو فراخوانی کنین مقدار C:\windows (همون مقدار پیشفرض) برگردونده میشه.در صورتی که اگه chDir رو فراخوانی نمیکردین مقدار C:\windows\System32 رو برمیگردوند.

chDrive .16 درایو پیشفرض رو تعیین میکنه.در حالت عادی درایو پیشفرض همون درایویه که برنامه داخلش اجرا شده.یعنی وقتی تابع CurDir رو بدون دادن درایو فراخوانی کنین سراغ درایوی میره که برنامه توش اجرا شده.مثلا برای من که برنامم داره توی درایو D اجرا میشه CurDir قبل از فراخوانی (“:ChDrive(“C مقدار “D:\vb\myproj” رو برگردوند بعد از فراخوانی مقدار C:\windows\System32 رو.

Choose .17 از یه لیست ارگومان با گرفتن Index یکیشون رو برمیگردونه .مثلا

Choose(3, "Arg1", "Arg2", "Arg3", "Arg4", "Arg5")

مقدار “Arg3” رو برمیگردونه.

Chr .18 یه کد اسکی میگیره و کاراکتر مربوط به اون رو برمیگردونه.مثلا Chr(65) = “A”

Chr$ .19 مثل قبلیه فقط مقداری که برمیگردونه از نوع رشته هستش(بهتره از این به جای قبلی استفاده کنین)

ChrB .20 مثل Chr فقط همیشه یه مقدار تک بایتی Single-Byte برمیگردونه یعنی طول مقداری که برمیگردونه از لحاظ بایت 1 هستش در صورتی که برای تابع قبلی 2 مثلا توی حافظه : Chr(65) => 65 00 ولی 65 <=(ChrB(65
پنج شنبه بیست و ششم 10 1387
 اپراتور

این اپراتور برای تشخیص نوع کنترل به کار می رود.روش استفاده از ان به شکل زیر است

TypeOf ControlName Is ControlType

مثال:کنترلی از نوع فایل بوکس رابه تایع زیر می فرستیم یرای تعیین عضو انتخاب شده

Private Function GetSelectItem(LST as Contol) as String
if TypeOf lst is listbox then
GetselectItem=Lst.text:Exit Function
else :GetselectItem=Lst.FileName:Exit Sub
End if

در خط یک تابع با آرگومان یک لیست از نوع کنترل تعریف می شود خروجی تایپ آف به صورت یک منو مانند تعریف متغییر هنگام کد نویسی ظاهر می شود که شما می توانید نو ع کنترل خود را از داخل آن انتخاب کنید.توجه کنید بین تایپ و آف نباید فاصله بیفتد واگر نه با خطای کامپایل مواجه می شوید.

DoEvents اپراتور

این اپراتور برای ارجاع تمام عملییات به سی پی یو برای انجام می باشد.اکثرآ از این اپراتور برای مواقعی استفاده می گردد که یک عملیات وقتگیر در حال انجام است مانند اعمال افکت روی تصویر و حلقه های تکرار طولانی. این اپراتور در درون حلقه قرار گرفته و کامپایل نمی شود مانند رهنمود ها در پاسکال عمل می کندوبه سی پی یو می گوید تمام کارهیت را به صورت یکسان انجام بده واز اولویت ها صرف نظر کن .در برنامه هایی که یک عملیات در درون یک حلقه هر دور انجام می شود آکثرآ باعث هنک کردن آن برنامه تا پایان عملیات می شود.چون برنامه بین واکنش به تکان خوردن موس -جابه جاکردن برنامه یا بزرگ و کوچک کردن برنامه وپردازش روی عملیات مورد نظر(مثلآ کپی فایل)عملییاتی که دارای اولویت پردازش است را انتخاب می کند.این اپراتور در چنین مواقعی بسیار مفید است وباعث می شود کاربر گمان نکند که برنامه هنک کرده و آن را ببندد.مثال:ِ

For i=0 to list1.listCount -1
if list1.list(i)<>"" then call Copy(list1.list(i),App.path+"\")
DoEvents
Next

در خط اول حلقه ای از صفر تا تعداد اعناصر موجود در لیست اغازمی شودو در هر درو فایل درون لیست در صورت وجود کپی می شود .اگر فایل های مازیاد باشد DoEventsو اپراتور را ننویسیم حتمآ برنامه ما هنک می کند.باید یاد آور شد استفاده نابجا و بیش از اندازه این اپراتور موجب کاهش سرعت برنامه می شود.ِالبته

استفاده می کنندSleepبه نام APIباعث کارکرد زیاد وشدید سی پی یو می شود وبرخی ترجیح می دهند از آن استفاده نکنند ویه جای ان از یک

فرق می کند. اسلیپ باعث میشود سی پی یو تمام کار های در حال اجرا را رها کند وبه مدت زمانی که جلویDoEventsباید گفت کارکرد اسلیپ به طور کلی با

آن نوشته می شود به استراحت بپردازد.ِ

sleep با توجه به زمانی که براش تعیین میکنی در وسط کار برنامه مکث ایجاد میکنه و در آن زمان هیچ خطی از کد برنامه اجرا نمیشه و همان طور که از اسم تابع .مشخصه برنامه در آن زمان به خواب میره
اسلیپ زمانی که با محیط خارج از برنامه در ارتباطی خیلی مفیده. چون معمولا وقتی دستوری در وی بی مثل اجرای فلان فایل مدتی طول می کشد و تو این مدت دستورات بعدی سریع اجرا می شوند که ممکن است نتیجه اش به اجای فایل بستگی داشته با شه.اسلیپ باعث میشه به ویندوز فرصت بدی سایر دستورات فرستاده شده به خارج برنامه رو اجرا کنه. البته گاهی اوقات هم نمیدونیم چند ثانیه مکث کنیم و ممکنه مجبور شیم برای احتیاط زمان زیادی مکث کنیم که سرعت برنامه میاد پایین پس تا می تونیم از دستورات خود وی بی استفاده کنیم تا بر نامه های خارجی.ِ

Shell دستور

توسط این دستور می تونید فایلی را در وی بی اجرا کنید .آدرسی که جلوی این دستور نوشته می شه اجرا میشه .شکل این دستور به این صورت است:ِ

Shell ProgramPath,RunModel

در آرگومان اول مسیر فایل نوشته می شود ودر آرگومان دوم مدلی که برنامه باید اجرا شود.در این ارگومان از آرگومان های زیر استفاده می گردد

vbHide=0 vbMaximizedFocus=1 vbMinimizedFocus=2 vbMinimizedNoFocus=3 vbNormalFocus=4 vbNormalNoFocus=5

در مدل صفر برنامه به صورت پنهان ظاهر می شود.برای مواقعی که می خواهیم عمل اجرا را از دید کاربر پنهان کنیم .در مدل 2 برنامه اجرا می شود به صورت کمینه(روی منوی استارت-مینیمایز شده)وفاکس هم روی ان می رود یعنی این که بعد از اجرا هی زرد و آبی می شود تا کار بر روی آن کلیک کند.مدل 3برنامه به

صورت ینیمایز -کمینه اجرا می شود زرد وآبی نمی شود (معمولی-فاکس رویش نمی رود).مدل 1برنامه به صورت تمام صفحه اجرا شده فاکس هم روی آن می رود(زرد و ابی می شود).در مدل 4برنامه با اندازه پیش فرض اجرا می شودوفاکس را هم می گیرد.درمدل 5برنامه با اندازه معمولی اجرا شده و فاکس نمی گیرد

کار برد مهم دیگر شل اجرا فایل های معمولی با یک برنامه اجرایی است مثل اجرای یک متن در نت پد.برای این کار نام فایل را بایک فاصله از نام فایل می نویسیم

Shell "NotPath.Exe"+" C:\Text1.txt" ,4
پنج شنبه بیست و ششم 10 1387
فرمت فایل M3U
چگونه یک فایل PlayList با پسوند M3U بسازیم

گاهی وقتی عده ی زیادی فایل را در مدیا پلیر یا وینمپ باز می کنیم یک گزینه به نام SavePlaylist
می بینیم که برای ذخیره کردن آن لیست در یک فایل استفاده می شود.اگر یک برنامه ی پخش صوت یا تصویر باکنترل مدیا پلیر نیز بنویسید برای پخش هم زمان چندین فایل به مشکل برخواهید خورد .درچنین مواقعی می توانیم با ذخیره لیست در یک فایل ام تری یو وباز کردن آن در کنترل مدیا پلیر چندین فایل را با هم پخش کرد .شاید شما بتوانید فایل هایتان را مستقیمآ به لیست مدیا پلیر احتیاج به دانستن فرمت فایل ام تری یو داریدPlayListاضافه کنید ولی باز هم برای ذخیره

با این تابع این کار را انجام دهید

Public Sub SaveList(OutPath As String,Lst as ListBox)
On Error Resume Next '--------------------------------------------------
Dim T3 As String, T2, strans As String, L As Single, i As Integer
T3 = "": T2 = ""
If Lst.List(1) = "" Then
strans = MsgBox("File Not Found!", vbCritical)
Exit Sub '------------------------------------------------------
End If
If UCase(Right(OutPath, 3)) <> "M3U" Then Exit Sub
Open OutPath For Output As #1
Print #1, "#EXTM3U:"
For i = 1 To Lst.ListCount '----------------------------
Print #1, "#EXTNIF:"
Print #1, Lst.List(i)
Next i '------------------------------------------------------
Close #1
End Sub

حال برای زخیره کردن فایل های صوتی و تصویری موجود در یک لیست تنها به دستور زیر نیاز دارید

SaveList "C:\1.M3U",List1
پنج شنبه بیست و ششم 10 1387
برنامه های سه بعدی از فضا نمی آیند توسط همین وی بی -دلفی واکثرآ سی پلاس پلاس طراحی می شن وقتی یک بازی سه بعدی روباز می کنیم ویک دفعه یک صفحه با گرافیکی که تا حالا ندیدیم یه صورت زیبا بالا می آد اکثر ما -بیشتر خودم- خیلی کف میکنیم که این برنامه ها چطور ساخته می شن-با چی ساخته می شن

امروز می خوام تنظیم ابعاد صفحه نمایش ویندوز رو با ابعاد دلخواه خودمون بگم که گام اول طراحی سه بعدیه اگه بشه شاید مراحل بعدیش رو هم بزارم روی سایت که مونده به یاری شما .بانظراتتون و خدا با توفیقش

ابتدا متغییر های اول فرم

Dim Dx As New DirectX7
Dim Dd As DirectDraw4
Dim clip As DirectDrawClipper

البته بعد از نوشتن کد بالا به منوی پروژه رفته گزینه ریفرنس رو انتخاب کنید در منوی باز شده تیک گزینه ی دایرکت ایکس 7 رو بزنید

تا کد هاتون اجرا بشه روی فرم دابل کلاک کنید و کد زیر رو بنویسید

Set Dd = Dx.DirectDraw4Create("")
Set clip = Dd.CreateClipper(0)
clip.SetHWnd Me.hWnd
' screen mode
Dd.SetDisplayMode 800, 600, 32, 0, DDSDM_DEFAULT

بااین کد صفحه نمایش به مد 800*600و حالت 32بایتی میره
پنج شنبه بیست و ششم 10 1387
کلاس یک مجموعه ای از کدهاست که شبیه به یک کنترل هستند فقط شکل ظاهری و طراحی ندارند
کلاس ها شی هستند - یعنی خاصیت دارند -کلاس ها می توانند داخل خود پردازه یا تابع محلی وسراسری داشته باشند
کلاس به چه دردی می خورد-کلاسها از تکرار کدها جلو گیری می کنند -کلاس ها خوانایی برنامه را افزایش می دهندوغیره
کلاس ها می توانند به صورت خودکار خود را مقدار دهی کنند-یک ماژول کلاس ایجاد کنید وکدهای زیر را در آن کپی کنید

تعریف یک خاصیت در کلاس

'-----------Set Property Information---------

Public Poperty Let CWidth( Value As Integer)
CWidth=Value
End Property

'------------Get Property Information--------------

Public Property Get CWidth() As Integer
CWidth=CForm.Width
End Property

دستور اول خاصیت را مقدار دهی می کند با مقداری که کار بر فرستاده
دستور دوم برای دادن مقدار برای کابر است .البته هر کدام از این دستورات را می توان به صورت محلی استفاده کرد
وی بی با کلاس ها مانند یک نوع جدید رفتار می کند یعنی شما برای استفاده از یک کلاس در سطح فرم باید یک متغیر از
نوع کلاس تعریف کنید .تعرف یک متغییر محلی در سطح فرم

Private CForm As Form

تمام متغییر ها وتوابع وپردازه ها وحتی نام خود کلاس را با سی آغاز کنید تا معلوم شود مربوط به یک کلاس است
تعرف یک پردازه سراسری در کلاس

Private Sub CSetInfo(Frm As Form)
Set Form=Frm
End Sub

اگر تمام کدها بالا را درست در یک ماژول کلاس کپی کنید اکنون نوبت استفاده از کدهای بالاست
در خط اول فرم یک متغییر از نوع نام کلاس تعریف کنید.بدین صورت

Dim Calss As Class1
Private Sub Form_Resiz()
Me.Caption="Form1.Width: "& Class.With
End Sub
پنج شنبه بیست و ششم 10 1387
کوتاهترین راه برای ساخت یک ساعت روش زیر است یک Picturebox به فرم اضافه کنید

Private Sub Form_Load()
Static Score As Long
Counter.Show
DoEvents
Score = 0
For I = 1 To 1265
DisplayNumber 10, Score
Score = I
DoEvents
Next
End Sub'-------------------------------------------------------------------
Private Sub DisplayNumber(DisplayWidth As Integer, TheNumber As Long)
Dim DisplayString As String, Zeros As Integer, GraphicsHeight As Single
Dim DigitValue As Integer, NumPosition As Integer
'--------------------Start Time---------------
GraphicsHeight = Picture1.ScaleHeight / 2
Zeros = DisplayWidth - Len(Trim(TheNumber))
For I = 0 To Zeros - 1
DisplayString = DisplayString & "0"
Next
DisplayString = DisplayString & Trim(Str(TheNumber))
For I = 0 To DisplayWidth - 1
DigitValue = Val(Mid(DisplayString, I + 1, 1))
If DigitValue = 0 Then NumPosition = 10 Else NumPosition = DigitValue _
Counter.PaintPicture Picture1.Image, I * (Picture1.ScaleWidth / 10), 0, _
Picture1.ScaleWidth / 10, Picture1.ScaleHeight / 2, (NumPosition - 1) _
* (Picture1.ScaleWidth / 10), GraphicsHeight, Picture1.ScaleWidth / 10, Picture1.ScaleHeight / 2
Next
End Sub

در کد بالا به دلایلی فرم خارج نمی شود باید یک دکمه برای خروج از فرم تنظیم کنیدودر کد کلیک آن بنوسید
End
پنج شنبه بیست و ششم 10 1387
On Error GoTo B
Dim r%, F%, Heght%, Wath%, X%, Color$ '--\/\/\/ Set Color Of Form
Color = "Red_Black" '----------------تعیین تیف رنگ
Heigh = Me.Height + 200: Widt = Me.Width
F = Heigh \ 255: r = 0
Select Case Color
Case "Red_Black": GoTo 1
Case "With_Red": GoTo 2
Case "Green_Black": GoTo 3
Case "With_Green": GoTo 4
Case "Blue_Black": GoTo 5
Case "With_Blue": GoTo 6
Case "With_Black": GoTo 7
End Select
Exit Sub '---------------------------Main--------------------------------------------
1
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 0, 0)
Next X
Next i: GoTo B
2 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250, 254 - r, 255 - r)
Next X
Next i: GoTo B
3 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(0, 250 - r, 0)
Next X
Next i: GoTo B
4 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 255, 255 - r)
Next X
Next i: GoTo B
5 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 255 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(0, 0, 250 - r)
Next X
Next i: GoTo B
6 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 250 - r, 255)
Next X
Next i: GoTo B
7 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 9000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 250 - r, 250 - r)
Next X
Next i '--------------------------------------------------------------------------------
B:
Set Me.Picture = Me.Image

میتونید این کد رو خیلی کوتاه استفاده کنید وهرخط چینی که مربوط به رنگ خودتونه رو نگه دارید بقیه رو حذف کنید.با کمی دقت می توانید رنگ های جدید بسازید
پنج شنبه بیست و ششم 10 1387
Private Declare Function SetPixelV Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub CmdBrightness_Click()
'variables for brightness, color calculation, positioning
Dim Brightness As Single
Dim NewColor As Long
Dim x, y As Integer
Dim r, g, b As Integer
'change the brightness to a percent
Brightness = TxtBrightness / 100
'run a loop through the picture to change every pixel
For x = 0 To Picture1.ScaleWidth
For y = 0 To Picture1.ScaleHeight
'get the current color value
NewColor = GetPixel(Picture1.hDC, x, y)
'extract the R,G,B values from the long returned by GetPixel
r = (NewColor Mod 256)
b = (Int(NewColor / 65536))
g = ((NewColor - (b * 65536) - r) / 256)
'change the RGB settings to their appropriate brightness
r = r * Brightness
b = b * Brightness
g = g * Brightness
'make sure the new variables aren't too high or too low
If r > 255 Then r = 255
If r < 0 Then r = 0
If b > 255 Then b = 255
If b < 0 Then b = 0
If g > 255 Then g = 255
If g < 0 Then g = 0
'set the new pixel
SetPixelV Picture1.hDC, x, y, RGB(r, g, b)
'continue through the loop
Next y
'refresh the picture box every 10 lines (a nice progress bar effect)
If x Mod 10 = 0 Then Picture1.Refresh
Next x
'final picture refresh
Picture1.Refresh
End Sub

احتیاج دارید که متن درون آن به درصد برابر میزان روشنایی استTxtBrightnessیک کادر متن به نامCmdBrightnessحال کردین با توضیحات کامل برای کد بالا یک کامند به نام
پنج شنبه بیست و ششم 10 1387
این خط رو در اولین خط کد فرم بنویسید-برای مبتدی ها

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

طریقه استفاده
Private Sub Form_load()
Dim W, H
W = Screen.Width / 15
H = Screen.Height / 15
StretchBlt hdc, 0, 0, W, H, GetDC(0&), 0, 0, W, H, vbSrcCopy
End Sub

کشیدن یک دایره روی فرم با کد نویسی-نمودار دایره ای-بیضی
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
PI = 3.14159265
For i = 0 To 161 Step 10
Me.Circle (219, 167), i, RGB(0, 0, 0), 360 * (PI / 180), 360 * (PI / 180), 1
Next
End Sub

آنرا به 3 تغییر دهید.داشتم می گفتم پارامتر سوم برای شعاع دایره -اندازه آن-پارامتر چهارمscalmode توضیحات: پارامتر اول ودوم مکان ترسیم دایره اگر دایره در فرم شما رسم نشد خاصیت
برای رنگ پنجم برای نقطعه شروع وششم برای نقطه ی پایان این دو تا برای رسم نمودار دایره ای بکار می روند.پارامتر آخر هم برای رسم بیضی استفاده می شود

چگونه می توان یک مداد درست کرد مانند برنامه نقاشی ویندوز
کد زیر را در MouseMove بنویسید
If Button <> vbright Then Me.PSet (X, Y)

چطور می توان یک قطره چکان درست کرد که روی هر گزینه رفت رنگ پیش فرض رنگ انجا شود
عکس بنویسیدMouseMoveبه فرم اضافه کنید یک عکس داخل کادر عکس قرار دهید و کدزیر را در رویدادPictureویکLabelیک

Label1.BackColor=Picture1.Point(X,Y)

چطور می توان یک عکس را معکوس کرد
منظورت ازمعکوس اگه معکوس خود عکس در طراحی باشه کد زیر جوابش هست

With Picture1
.PaintPicture .Picture, 0, .Height, .Width, -.Height
End With

ولی اگه منظورت معکوس رنگ باشه کد زیر جوابش هست
With Picture1
.PaintPicture .Picture, 0, 0, , , , , , , vbDstInvert
End With

یرای موقعی به کار می رود که از یک اسم زیاداستفاده می کنیم.اسم را جلوی آن مینویسیم وهر وقت یک دات بزنیم قابل استفاده استWithتوضیحات:ِ
پارامتر اول یرای عکسی که میخواهیم از آن برای ترسیم استفاده کنیم.دوم و سوم برای نقطه شروع ترسیم .چهارم و پنجم برای اندازه تصویر ترسیمی.ششموهفتم برای نقطه پایان ترسیم.هشتم ونهم برای اندازه های پایانی ترسیم وپارامتر آخر برای نوع ترسیم
پنج شنبه بیست و ششم 10 1387
مبحث امروز که ارتباط داره به خواندن اطلاعات اساسی فایل MP3.متغییر های زیر رو تو اول کد تعریف کنید

Dim HasTag As Boolean
Dim Tagg As String * 3
Dim Songname As String * 30
Dim Artist As String * 30
Dim Album As String * 30
Dim Year As String * 4
Dim Comment As String * 30
Dim Genre As String * 1

البته کد بالا تست شده است مورد کاملش اینهاست ولی نمی دونم جواب بده یانه خودتون امتحان کنید اگه شد بهم بگید -فعلآ استفاده نکنید

Private Type MP3Tag
FullName As String ' Filename and filepath of MP3 file
FileName As String ' Name of MP3 file
Path As String ' Path of MP3 file
title As String * 30
artist As String * 30
album As String * 30
Year As String * 4
Comment As String * 30
Genre As String * 20
TagPresent As Boolean
MPEGVersion As String * 3 ' Version 1.0, 2.0 or 3.0
Layer As String * 1 ' Layer 1, 2 or 3
Protection As Boolean ' 0=CRC is present, 1=Not Protected
BitRate As String * 3 ' Recording bitrate
SampleRate As String * 5 ' Sampling Frequency
Padding As Integer ' 0=Frame is not padded, 1=(32bits for Layer 1, 8bits for Layer 2/3)
PrivateBit As Integer ' Not used. Do what you want with it
ChannelMode As String * 12 ' 00=Stereo, 01=Joint Stereo, 10=Dual Channel Stereo, 11=Mono
ModeExtension As String * 2 ' Used only for Joint Stereo
Copyright As Boolean ' Is file copyrighted?
Original As Boolean ' Is file on original media?
Emphasis As String * 8 ' Emphasis setting (usually none (00))
FrameLength As Integer ' Calculated from BitRate, SampleRate and Padding
TotalFrames As Long ' Filelength/Framelength
PlayTime As Single ' Calculated from TotalFrames, SampleRate and Stereo?
ValidHeader As Boolean ' True=Valid Header found, False=Not an MP3 file
End Type

بعد یک پروسیجر به این صورت تعریف می کنیم تاهر وقت بهش یک نام فایل پاس دادیم متغییر هامون پر بشه از اطلاعت فایل

Private Sub GetTag(Filename)
Open Filename For Binary As #1
Get #1, FileLen(Filename) - 127, Tagg
If Not Tagg = "TAG" Then
Close #1
HasTag = False
Songname = "No Tag Found"
Artist = "No Tag Found"
Album = "No Tag Found"
Year = "None"
Comment = "No Tag Found"
Genre = "0"
Exit Sub
End If
HasTag = True
Get #1, , Songname
Get #1, , Artist
Get #1, , Album
Get #1, , Year
Get #1, , Comment
Get #1, , Genre
Close #1
End Sub

حالا به این صورت میشه ازش استفاده کرد

Me.GetTag(MP3 FileName)

به طور معمول وقتی فایل به صورت باینری باز می شه چیزی جز صفر و یک رو نمشه از توش خواند به همین دلیل این نوع باز کردن فایل رو تصویر آینه وار حافظه می گن.چون هر چی روی هارد نوشته همون رو دودستی تحویلت می ده!از این رو باید همیشه بعد از خواندن این نوع فایل ها اونارو از فرمت باینری در آورد با تابع زیر که ازقبل توی وی بی هست

Src(Your Ascii Word)

اگه رشته رو با(String *30)ولی در برنامه بالا چون اندازه رشته رو تعریف کردیم

یک کد اسکی مقدار دهی کنیم خود به خود هنگام چاپ به فرم رشته ی معمولی در میاد

در دستور بالا ما با علامت ضربدر به وی بی می گوییم که چه مقدار حافظه را برای متغییر ما نگه دارد ولی اگر این مورد را استفاده نکنیم وی بی به صورت اتوماتیک سایز رشته رو انتخاب .میکنه اگه رشته کم باشه کم واگر زیاد باشه زیاد براش جا نگه می داره به ازای هر حرف یک بایت
پنج شنبه بیست و ششم 10 1387
کنترل WindowsMediaPlayer که توسط کتابخانه قدرتمندی پشتیبانی می شود را می توان در انواع ویندوز استفاده کرد

نحوه ی استفاده از کنترل. از منوی Components\WindowsMediaPlayer گزینه WindowsMediaPlayer را انتخاب کنید

قبل از اینکه آن کادر را ببندید MicrosoftCommonDialog را هم انتخاب کنید

یک دکمه قرار دهید و کد زیر را درونش وارد کنید

CommonDialog1.ShowOpen
WindowsMediaPlayer1.URL=CommDialog1.FileName

مشاهده می کنید که کادر فایل باز شده و فایل انتخاب شده پخش می شود

private sub Play_Click()
WindowsMediaPlayer1.Controls.Play()
End Sub

'------------------------
Prrivate Sub Stop_Click()
WindowsMediaPlayer1.Controls.Stop()
End Sub

'------------------------
Private Sub Pause_Click()
WindowsMediaPlayer1.Pause()
End Sub

یک تایمر به فرم اضافه کنید و یک HScroll1 و یک Lable
تایمر را به 50 تنظیم کنید.روی تایمر دوبار کلیک کنید وکد زیر را وارد کنید

Private sub Timer1_Timer()
Label1.Caption=WindowsMediaPlayer1.Controls.CurrentPositionString
HScroll1.max=WindowsMediaPlayer1.Controls.CurrentItem
HScrol1.Value=WindowsMediaPlayer1.Controls.CurrentPosition
End Sub
پنج شنبه بیست و ششم 10 1387
یک فرم ایجاد کنید و یه هفت تا لیبل بزارین روش با یه تایمر و یه HScroll
خاصیت Max مربوط به اسکرول رو روی 100 بزارین
خاصیت Interval تایمر رو روی 50 بزارین

این کدها رو اولین خط فرم بنویسید

'----------Type New Data For Memory------------------
Private Type MEMORYSTATUS
dwlength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type '------------------Declear API Of Kernal Windows Librery-------------
Private Declare Sub GlobalMemoryStatus Lib "KERNEL32" (lpBuffer As MEMORYSTATUS)
Dim Mem As MEMORYSTATUS

روی تایمر دابل کلیک کنید و کد زیر را بنویسید

GlobalMemoryStatus Mem
Me.Caption = Mem.dwMemoryLoad & "% used"
Label1.Caption = "Memory used: " & Mem.dwMemoryLoad & "%"
Label2.Caption = "Total Physical Memory: " & Mem.dwTotalPhys
Label3.Caption = "Available Physical Memory: " & Mem.dwAvailPhys
Label4.Caption = "Page File Bytes: " & Mem.dwTotalPageFile
Label5.Caption = "Available bytes of Page File: " & Mem.dwAvailPageFile
Label6.Caption = "Total Virtual bytes: " & Mem.dwTotalVirtual
Label7.Caption = "Available Virtual Bytes: " & Mem.dwAvailVirtual
HScroll1.Value = Mem.dwMemoryLoad

با کدای بالا می تونین کارکرد CPU و RAM رو مشاهده کنید مثل خود ویندوز
پنج شنبه بیست و ششم 10 1387
چطور میتوان سطل آشغال ویندوز رو خالی کرد

اگه بخواید یک برنامه تقویت ویندوز بنویسید به گزینه خالی کردن سطل آشغال ویندوز نیاز خواهید داشت
سری قبل این اموزش رو در مورد کنترل سی پی یو (تاکس منیگر)ویندوز نوشتم
برای این کار باید از تابعی موجود در کتابخانه قدرتمند شل که در آرشیو اموزشهای زیادی راجع به این کتابخانه هست استفاده کنید

شیوه ی تعریف کتابخانه

Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hWnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long
Const SHERB_NOPROGRESSUI = &H2

شیوه ی استفاده

Private Sub Command1_Click()
Dim retvaL
retvaL = SHEmptyRecycleBin(Form1.hWnd, "", SHERB_NOPROGRESSUI)
End Sub
پنج شنبه بیست و ششم 10 1387
X